本篇目录
介绍###
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等基属性以及更多。
要了解以上属性,请查阅其他相应博客。