ABP官方文档翻译 5.1 Web API控制器

ASP.NET Web API控制器

介绍

  ABP通过Abp.Web.Api nuget包集成到ASP.NET Web API控制器。你可以按照往常一样创建ASP.NET Web API控制器。依赖注入系统可以用于一般的ApiControllers。但是,建议继承AbpApiController,它提供了许多好处并且能够更好的与ABP集成。

AbpApiController基类

  这有一个简单的继承自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用来集成审计日志系统。它默认记录所有动作的请求(如果审计没有被禁用)。你可以使用AuditedDisableAuditing特性来控制动作和控制器。

授权

  你可以给控制器或动作使用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方法。

 

返回主目录

posted @ 2017-06-14 23:14  Yung2022  阅读(604)  评论(0编辑  收藏  举报