本文共 1870 字,大约阅读时间需要 6 分钟。
ABP通过Abp.Web.ApiNuget包集成了 ASP.NET Web API控制器。你可以像以往创建Asp.Net Web API控制器那样创建Web API控制器。依赖注入对于有规律的ApiController(其实就是继承自AbpApiController的控制器)是有效的。
但是你应该从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"); //... }}
要使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_userRepository; public UsersController(IRepository userRepository) { _userRepository = userRepository; } [UnitOfWork] public virtual List Users(string filter) { var users = _userRepository .GetAll() .Where(u => u.UserName.StartsWith(filter)) .ToList(); //... }}
这里我们声明了UnitOfWork特性。因为仓储的 GetAll()方法返回了 IQueryable,而当它使用 ToList()方法(由于IQueryable的延迟执行)时需要一个打开的数据库连接,所以这里需要声明该特性。注意该action方法应该声明为virtual(否则拦截无法工作)。
请查看获取更多。
你还可以使用预注入的 , , , , ,, , , , 等基属性以及更多。
要了解以上属性,请查阅其他相应博客。
本文转自tkbSimplest博客园博客,原文链接:http://www.cnblogs.com/farb/p/ABPWebAPI.html,如需转载请自行联系原作者