企业🤖AI Agent构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
## 5.1 ABP分布式服务 ASP.NET Web API Controllers ### 5.1.1 简介 ABP已经把 **ASP.NET Web API Controllers** 集成到了 **Abp.Web.Api**,你只要通过Nuget安装它。正如你一直那样做得,你可以创建常规的ASP.NET Web API Controllers, [依赖注入](225827)可以解析常规的ApiControllers。 为了能够享受使用ABP.Web.Api带来的便利,应该使你的controllers派生自 **AbpApiController**。 ### 5.1.2 AbpApiController 基类 下面是一个简单的派生自AbpApiController的示例代码: ```csharp public class UsersController : AbpApiController { } ``` #### 1. 本地化 为了使本地化更容易,在AbpApiController中定义了一个方法:**L**; 如下所示: ```csharp public class UsersController : AbpApiController { public UsersController() { LocalizationSourceName = "MySourceName"; } public UserDto Get(long id) { var helloWorldText = L("HelloWorld"); //... } } ``` 为了能够使用 **L** 方法,首先我们应该初始化 **LocalizationSourceName**。当然,为了不重复初始化该变量,我们可以定义一个继承自AbpApiController的基类,在该类中初始化它,以后所有的Controller类都继承自该基类。 #### 2. 审计日志 在Api Controller中审计日志默认是未启用状态,所以你应该在Api Controller 或者 Action 上添加 **Audited** 特效来开启该功能。 详细请参照 [Audit Logs](4.6 ABP应用层—审计日志)。 #### 3. Authorization 你可以用AbpApiAuthorize特性来阻止未授权的用户来访问你的Controllers和Actions。 示例如下: ```csharp public class UsersController : AbpApiController { [AbpApiAuthorize("MyPermissionName")] public UserDto Get(long id) { //... } } ``` AbpApiController也定义了一个快速检测权限的方法**IsGranted**。 详情请参照[authorization](225843)。 #### 4. 工作单元 Web Api Action默认是没有开启工作单元模式的。如果需要开启工作单元,你需要在Action上添加 **UnitOfWork** 的特性,如下所示: ```csharp 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(); //... } } ``` 由于仓储的 **GetAll()** 方法返回的是 **IQuerable** 类型,在调用 **ToList()** 方法的时候需要连接数据库(这是由于IQuerable的延迟执行特性所决定的)。 >注意:使用 **UnitOfWork** 特性的方法,该方法必须是virtual的,否则拦截器将不能使用。 详情请参照[工作单元](3.4ABP领域层-工作单元.md)。 ### 5.1.2 其他 你也可以(pre-inijected)预先注入 AbpSession, EventBus, PermissionManager, PermissionChecker, SettingManager, FeatureManager, FeatureChecker, LocalizationManager, Logger, CurrentUnitOfWork 等基础属性。