ASP.NET Web API控制器
ABP通过Abp.Web.Api nuget包集成到ASP.NET Web API控制器。你可以按照往常一样创建ASP.NET Web API控制器。依赖注入系统可以用于一般的ApiControllers。但是,建议继承AbpApiController,它提供了许多好处并且能够更好的与ABP集成。
这有一个简单的继承自AbpApiController的api控制器:
public class UsersController : AbpApiController { }
AbpApiController定义了L方法,它使本地化更加简单。示例:
public class UsersController : AbpApiController { public UsersController() { LocalizationSourceName = "MySourceName"; } public UserDto Get(long id) { var helloWorldText = L("HelloWorld"); //... } }
需要设置LocalizationSourceName才能使L方法正常使用。可以在基类api控制器里设置,这样就不用在每个api控制器里重复设置了。
你也可以使用预注入的AbpSession,EventBus,PermissionManager,PermissionChecker,
SettingManager,FeatureChecker,LocalizationManager,Logger,CurrentUnitOfWork基础属性等。
ABP为AspNet Web API定义了一些预生成的过滤器。他们默认添加到所有控制器的所有动作上。
AbpApiAuditFilter用来集成审计日志系统。它默认记录所有动作的请求(如果审计没有被禁用)。你可以使用Audited和DisableAuditing特性来控制动作和控制器。
你可以给控制器或动作使用AbpApiAuthorize特性来禁止未授权的用户使用你的控制器和动作。示例:
public class UsersController : AbpApiController { [AbpApiAuthorize("MyPermissionName")] public UserDto Get(long id) { //... } }
你可以为动作或控制器定义AllowAnoymous特性来禁用认证或授权。AbpApiController也定义了IsGranted方法作为在代码中检查权限的捷径。
参见授权文档了解更多。
AbpAntiForgeryApiFilter用来自动保护ASP.NET Web API 的POST、PUT和DELETE请求动作免受CSRF/XSRF的攻击。参见CSRF文档了解更多。
AbpApiUowFilter用来集成工作单元系统。它在动作执行之前自动开始一个新的工作单元,并在动作执行结束之后完成工作单元(如果没有异常抛出)。
你可以使用UnitOfWork特性来控制动作UOW的行为。你也可以使用启动配置来为所有的动改变默认的工作单元特性。
如果动作成功完成,ASP.NET Boilerplate默认不包装Web API动作。但是它处理和包装异常。如果需要,你可以给动作或控制器添加WrapResult/DontWrapResult特性。你可以在启动配置里(使用Configuration.Modules.AbpWebApi()...)改变默认的行为。参见AJAX文档了解更多关于结果包装的信息。
ABP为WebAPI请求的响应添加缓存控制header(no-cache,no-store)。因此,它阻止浏览器缓存相应,甚至GET请求也会被阻止缓存。可以在配置里禁用此功能。
AbpApiValidationFilter自动检查ModelState.IsValid,如果校验失败则阻止动作的执行。还实现了输入DTO的校验,如在校验文档中所描述。
AbpApiDateTimeBinder用来标准化DateTime(还有Nullable<DateTIme>)输入,使用Clock.Normalize方法。