You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
8.5 KiB
8.5 KiB
MVC扩展
**本文档中引用的文件** - [AbpAspNetCoreMvcWrapperModule.cs](file://aspnet-core/framework/mvc/LINGYUN.Abp.AspNetCore.Mvc.Wrapper/LINGYUN/Abp/AspNetCore/Mvc/Wrapper/AbpAspNetCoreMvcWrapperModule.cs) - [AbpWrapResultFilter.cs](file://aspnet-core/framework/mvc/LINGYUN.Abp.AspNetCore.Mvc.Wrapper/LINGYUN/Abp/AspNetCore/Mvc/Wrapper/Filters/AbpWrapResultFilter.cs) - [AbpWrapperOptions.cs](file://aspnet-core/framework/common/LINGYUN.Abp.Wrapper/LINGYUN/Abp/Wrapper/AbpWrapperOptions.cs) - [IWrapResultChecker.cs](file://aspnet-core/framework/mvc/LINGYUN.Abp.AspNetCore.Mvc.Wrapper/LINGYUN/Abp/AspNetCore/Mvc/Wrapper/IWrapResultChecker.cs) - [IActionResultWrapper.cs](file://aspnet-core/framework/mvc/LINGYUN.Abp.AspNetCore.Mvc.Wrapper/LINGYUN/Abp/AspNetCore/Mvc/Wrapper/Wraping/IActionResultWrapper.cs) - [IActionResultWrapperFactory.cs](file://aspnet-core/framework/mvc/LINGYUN.Abp.AspNetCore.Mvc.Wrapper/LINGYUN/Abp/AspNetCore/Mvc/Wrapper/Wraping/IActionResultWrapperFactory.cs) - [AbpIdempotentActionFilter.cs](file://aspnet-core/framework/mvc/LINGYUN.Abp.AspNetCore.Mvc.Idempotent/LINGYUN/Abp/AspNetCore/Mvc/Idempotent/AbpIdempotentActionFilter.cs) - [AbpAspNetCoreMvcIdempotentModule.cs](file://aspnet-core/framework/mvc/LINGYUN.Abp.AspNetCore.Mvc.Idempotent/LINGYUN/Abp/AspNetCore/Mvc/Idempotent/AbpAspNetCoreMvcIdempotentModule.cs) - [AbpWrapIdempotentActionFilter.cs](file://aspnet-core/framework/mvc/LINGYUN.Abp.AspNetCore.Mvc.Idempotent.Wrapper/LINGYUN/Abp/AspNetCore/Mvc/Idempotent/Wrapper/AbpWrapIdempotentActionFilter.cs) - [README.md](file://aspnet-core/framework/mvc/LINGYUN.Abp.AspNetCore.Mvc.Wrapper/README.md) - [README.md](file://aspnet-core/framework/mvc/LINGYUN.Abp.AspNetCore.Mvc.Idempotent/README.md)目录
简介
本文档详细介绍了ABP框架中MVC扩展的功能,重点阐述了幂等性处理、请求包装和客户端集成等核心机制。文档深入解析了MVC扩展的技术架构、配置方式和使用场景,为开发者提供了完整的最佳实践指南。通过本文档,开发者将学习如何配置MVC扩展、处理幂等性请求以及优化MVC性能,并通过实际代码示例了解如何在应用中使用这些MVC扩展功能。
项目结构
ABP框架的MVC扩展模块主要包含三个核心组件:请求包装器、幂等性处理和包装器与幂等性的集成。这些组件位于aspnet-core/framework/mvc目录下,形成了一个完整的MVC功能扩展体系。
graph TB
subgraph "MVC扩展模块"
Wrapper[请求包装器]
Idempotent[幂等性处理]
WrapperIdempotent[包装器与幂等性集成]
end
Wrapper --> WrapperModule[AbpAspNetCoreMvcWrapperModule]
Idempotent --> IdempotentModule[AbpAspNetCoreMvcIdempotentModule]
WrapperIdempotent --> WrapperIdempotentModule[AbpWrapIdempotentActionFilter]
WrapperModule --> WrapperFilter[AbpWrapResultFilter]
IdempotentModule --> IdempotentFilter[AbpIdempotentActionFilter]
style WrapperModule fill:#f9f,stroke:#333
style IdempotentModule fill:#f9f,stroke:#333
style WrapperIdempotentModule fill:#f9f,stroke:#333
图示来源
- AbpAspNetCoreMvcWrapperModule.cs
- AbpAspNetCoreMvcIdempotentModule.cs
- AbpWrapIdempotentActionFilter.cs
本节来源
- README.md
- README.md
核心组件
MVC扩展的核心组件包括请求包装器、幂等性处理和它们的集成实现。请求包装器负责统一包装ASP.NET Core MVC的响应结果,支持自定义包装规则、异常结果包装和本地化错误消息。幂等性处理模块确保API接口的幂等性,防止重复请求造成数据不一致。这两个功能通过专门的过滤器实现,可以在Action执行前后进行拦截和处理。
本节来源
- AbpWrapResultFilter.cs
- AbpIdempotentActionFilter.cs
架构概述
MVC扩展的架构基于ASP.NET Core的过滤器机制,通过在MVC管道中注入自定义过滤器来实现功能扩展。整体架构分为三层:配置层、过滤器层和包装器层。配置层提供灵活的选项配置,过滤器层负责拦截请求和响应,包装器层则实现具体的包装逻辑。
graph TD
A[HTTP请求] --> B[配置层]
B --> C[过滤器层]
C --> D[包装器层]
D --> E[HTTP响应]
subgraph "配置层"
B1[AbpWrapperOptions]
B2[AbpMvcIdempotentOptions]
end
subgraph "过滤器层"
C1[AbpWrapResultFilter]
C2[AbpIdempotentActionFilter]
end
subgraph "包装器层"
D1[IActionResultWrapperFactory]
D2[IActionResultWrapper]
end
B --> C1
B --> C2
C1 --> D1
D1 --> D2
style B1 fill:#e6f3ff,stroke:#333
style B2 fill:#e6f3ff,stroke:#333
style C1 fill:#e6f3ff,stroke:#333
style C2 fill:#e6f3ff,stroke:#333
style D1 fill:#e6f3ff,stroke:#333
style D2 fill:#e6f3ff,stroke:#333
图示来源
- AbpWrapperOptions.cs
- AbpWrapResultFilter.cs
- AbpIdempotentActionFilter.cs
- IActionResultWrapperFactory.cs
- IActionResultWrapper.cs
详细组件分析
请求包装器分析
请求包装器组件通过AbpWrapResultFilter实现,该过滤器在MVC结果执行时进行拦截,根据配置决定是否对结果进行包装。包装器支持多种配置选项,包括启用/禁用包装、忽略特定控制器和返回类型、自定义空结果消息等。
类图
classDiagram
class AbpWrapResultFilter {
+OnResultExecutionAsync(context, next)
-ShouldWrapResult(context)
-HandleAndWrapResult(context)
}
class IWrapResultChecker {
+WrapOnExecution(context)
}
class IActionResultWrapperFactory {
+CreateFor(context)
}
class IActionResultWrapper {
+Wrap(context)
}
class AbpWrapperOptions {
+IsEnabled
+HttpStatusCode
+IgnoreReturnTypes
+IgnoreControllers
+IgnorePrefixUrls
+MessageWithEmptyResult
}
AbpWrapResultFilter --> IWrapResultChecker : "使用"
AbpWrapResultFilter --> IActionResultWrapperFactory : "使用"
AbpWrapResultFilter --> AbpWrapperOptions : "使用"
IActionResultWrapperFactory --> IActionResultWrapper : "创建"
图示来源
- AbpWrapResultFilter.cs
- IWrapResultChecker.cs
- IActionResultWrapperFactory.cs
- IActionResultWrapper.cs
- AbpWrapperOptions.cs
本节来源
- [AbpWrapResultFilter.cs](file://aspnet-core/framework/mvc/LINGYUN.Abp.AspNetCore.Mvc.Wrapper/LINGYUN/Abp/AspNetCore/Mvc/Wrapper/Filters/AbpWrap