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等基属性以及更多。

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

  • 相关阅读:
    js实现全选反选功能
    seajs笔记
    延迟加载图片
    JavaScript 数组基本操作
    图片上传,头像上传
    命令模式
    动态加载js css 插件
    发布-订阅模式
    js 切换全屏
    JavaScript 经典之一 闭包
  • 原文地址:https://www.cnblogs.com/farb/p/ABPWebAPI.html
Copyright © 2011-2022 走看看