返回總目錄
本篇目錄
- 介紹
- AbpApiController基類
- 本地化
- 審計日志
- 授權
- 工作單元
- 其他
介紹
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等基屬性以及更多。
要了解以上屬性,請查閱其他相應博客。