zoukankan      html  css  js  c++  java
  • 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等基属性以及更多。

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

  • 相关阅读:
    软件设计7个原则
    vue.js 样式绑定 font-size 问题
    实例理解scala 隐式转换(隐式值,隐式方法,隐式类)
    著名端口整理(常用服务的默认端总结)
    .NET Core Web API 实现大文件分片上传
    ngnix反向代理tomcat,ssl证书配置及自定义错误页面
    微信登录闪退
    gradle如何配置阿里云的中央仓库
    HashMap底层实现和原理
    关于Java中String类的hashCode方法
  • 原文地址:https://www.cnblogs.com/farb/p/ABPWebAPI.html
Copyright © 2011-2022 走看看