ABP理论学习之Web API控制器(新增)

返回总目录


本篇目录

介绍###

ABP通过Abp.Web.ApiNuget包集成了 ASP.NET Web API控制器。你可以像以往创建Asp.Net Web API控制器那样创建Web API控制器。依赖注入对于有规律的ApiController(其实就是继承自AbpApiController的控制器)是有效的。

但是你应该从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");

        //...
    }
}

要使L方法生效,必须设置LocalizationSourceName。你可以在自己的api控制器基类中设置而不用在每个api控制器中都重复设置。

审计日志

审计日志不会为api控制器自动记录。如果你要为api控制器记录日志的话,应该在控制器或者它的action方法上声明Audited特性。请查看审计日志获取更多信息。

授权

你可以为api控制器或者action方法使用AbpApiAuthorize特性来阻止未授权的用户使用控制器和action方法。例子:

public class UsersController : AbpApiController
{
    [AbpApiAuthorize("MyPermissionName")]
    public UserDto Get(long id)
    {
        //...
    }
}

AbpApiController也定义了检查权限的IsGranted方法作为快捷方式。请查看授权一节获取更多信息。

工作单元

Web API的action方法默认不是工作单元。例如,如果你需要在action方法中打开数据库连接,就需要像下面那样声明UnitOfWork特性:

public class UsersController : AbpApiController
{
    private readonly IRepository<User, long> _userRepository;

    public UsersController(IRepository<User, long> userRepository)
    {
        _userRepository = userRepository;
    }

    [UnitOfWork]
    public virtual List<UserDto> Users(string filter)
    {
        var users = _userRepository
            .GetAll()
            .Where(u => u.UserName.StartsWith(filter))
            .ToList();

        //...
    }
}

这里我们声明了UnitOfWork特性。因为仓储的 GetAll()方法返回了 IQueryable,而当它使用 ToList()方法(由于IQueryable的延迟执行)时需要一个打开的数据库连接,所以这里需要声明该特性。注意该action方法应该声明为virtual(否则拦截无法工作)。

请查看工作单元获取更多。

其他

你还可以使用预注入的 AbpSession, EventBus, PermissionManager, PermissionChecker, SettingManager, FeatureManager, FeatureChecker, LocalizationManager, Logger, CurrentUnitOfWork等基属性以及更多。

要了解以上属性,请查阅其他相应博客。

原文地址:https://www.cnblogs.com/farb/p/ABPWebAPI.html