ABP理论学习之Web API控制器(新增)

返回总目录


本篇目录

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

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

转载于:https://www.cnblogs.com/farb/p/ABPWebAPI.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/458374.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++类构造函数初始化列表及初始化成员变量的误区

构造函数初始化列表以一个冒号开始&#xff0c;接着是以逗号分隔的数据成员列表&#xff0c;每个数据成员后面跟一个放在括号中的初始化式。例如&#xff1a;[cpp] view plaincopyclass CExample { public: int a; float b; //构造函数初始化列表 CExampl…

将centos7打造成桌面系统

前言 以下所有操作默认在root权限下执行&#xff0c;桌面环境是kde&#xff0c;使用gnome的也可以参考一下。我收集的以下要用到的一些安装包&#xff0c;360网盘http://yunpan.cn/csMhBAp92vTgN 提取码 92e2以下要用的安装软件语法&#xff1a;通过软件源在线安装&#xff1a;…

VC2010打开资源视图时提示“指南必须指定类型”,.rc资源文件损坏(转)

VC: 打开资源视图时提示“指南必须指定类型 ”(Guideline……specify type) &#xff0c;.rc资源文件损坏 可能是TFS导致的使用记事本打开.rc文件&#xff0c;找到“DESIGNINFO”节&#xff0c;会看到如下的数据&#xff1a; BEGIN , 50 , 13798327 EN…

C++ virtual 析构函数

copy自:http://zxjgoodboy.blog.sohu.com/61482463.html 在此基础上稍作修改C中虚析构函数的作用 我们知道&#xff0c;用C开发的时候&#xff0c;用来做基类的类的析构函数一般都是虚函数。可是&#xff0c;为什么要这样做呢&#xff1f;下面用一个小例子来说明&#xff1a; …

(八)企业部分之nginx+tomcat+memcached负载均衡集群搭建

【server1】vim /usr/local/lnmp/tomcat/conf/context.xml<Context>......<Manager className"de.javakaffee.web.msm.MemcachedBackupSessionManager"memcachedNodes"n1:172.25.45.1:11211,n2:172.25.45.2:11211"failoverNodes"n1"req…

泛型算法(二十三)之排列算法

1、is_permutation(ForwardIterator1 first1, ForwardIterator1 last1, ForwardIterator2 first2)&#xff1a;C11版本&#xff0c;判断两个序列是否为同一元素集的两个排列。 std::vector<int> c1 {1, 2, 3, };std::vector<int> c2 {1, 2, 3, 1, 3};//判断两个序…

C++ 虚函数经典深入解析

from&#xff1a;https://blog.csdn.net/gggg_ggg/article/details/45915505C中的虚函数的作用主要是实现了多态的机制。 关于多态&#xff0c;简而言之就是用父类型别的指针指向其子类的实例&#xff0c;然后通过父类的指针调用实际子类的成员函数。 这种技术可以让父类的指针…

21OGNL与ValueStack(VS)-静态方法访问

转自&#xff1a;https://wenku.baidu.com/view/84fa86ae360cba1aa911da02.html 在LoginAction中增加如下方法&#xff1a;public static String getSta() { return "这是LoginAction中的静态方法"; } 然后在loginSuc.jsp中增加如下代码&#xff1a; 调用Action中的静…

win7通过easyBCD引导ubuntu

我电脑配置了固态和传统双硬盘&#xff0c;SSD已经装了win7&#xff0c;然后在传统硬盘上安装ubuntu&#xff0c;结果安装完成后看不到ubuntu的入口。因为跟win7不是装在一个驱动设备上&#xff0c;所以使用easyBCD的Linux&#xff0f;BCD选项也无法正确引导。最后通过easyBCD的…

深入理解C++中的explicit关键字

深入理解C中的explicit关键字kezunhaigmail.com http://blog.csdn.net/kezunhaiC中的explicit关键字只能用于修饰只有一个参数的构造函数, 它的作用是表明该构造函数是显示的, 而非隐式的&#xff0c; 跟它相对应的另一个关键字是implicit, 意思是隐藏的,构造函数默认情况下即声…

JAVA面试中问及HIBERNATE与 MYBATIS的对比,在这里做一下总结(转)

hibernate以及mybatis都有过学习&#xff0c;在java面试中也被提及问道过&#xff0c;在项目实践中也应用过&#xff0c;现在对hibernate和mybatis做一下对比&#xff0c;便于大家更好的理解和学习&#xff0c;使自己在做项目中更加得心应手。 第一方面&#xff1a;开发速度的对…

Caffe源码解析4: Data_layer

转载请注明出处&#xff0c;楼燚(y)航的blog&#xff0c;http://home.cnblogs.com/louyihang-loves-baiyan/ data_layer应该是网络的最底层&#xff0c;主要是将数据送给blob进入到net中&#xff0c;在data_layer中存在多个跟data_layer相关的类 BaseDataLayerBasePrefetchingD…

理解C++中拷贝构造函数

拷贝构造函数的功能是用一个已有的对象来初始化一个被创建的同样对象&#xff0c;是一种特殊的构造函数&#xff0c;具有一般构造函数的所有特性&#xff0c;当创建一个新对象的时候系统会自动调用它&#xff1b;其形参是本类对象的引用&#xff0c;它的特殊功能是将参数代表的…

IDEA mybatis-generator-maven-plugin 插件的使用

2019独角兽企业重金招聘Python工程师标准>>> pom.xml中添加插件 <plugin><groupId>org.mybatis.generator</groupId><artifactId>mybatis-generator-maven-plugin</artifactId><version>1.3.2</version><configuratio…

python优秀网友学习笔记推荐

AstralWindMr.Seven 转载于:https://www.cnblogs.com/migongci0412/p/5154892.html

深入理解CRITICAL_SECTION

摘要临界区是一种防止多个线程同时执行一个特定代码节的机制&#xff0c;这一主题并没有引起太多关注&#xff0c;因而人们未能对其深刻理解。在需要跟踪代码中的多线程处理的性能时&#xff0c;对 Windows 中临界区的深刻理解非常有用。本文深入研究临界区的原理&#xff0c;以…

webpack进阶之插件篇

上一篇博客讲解了webpack环境的基本&#xff0c;这一篇讲解一些更深入的内容和开发技巧。基本环境搭建就不展开讲了 一、插件篇 1. 自动补全css3前缀 autoprefixer 官方是这样说的&#xff1a;Parse CSS and add vendor prefixes to CSS rules using values from the Can I Use…

QT:QObject 简单介绍

QObject 是所有Qt对象的基类。QObject 是Qt模块的核心。它的最主要特征是关于对象间无缝通信的机制&#xff1a;信号与槽。 使用connect()建立信号到槽的连接&#xff0c;使用disconnect()销毁连接&#xff0c;使用blockSignals()暂时阻塞信号以避免无限通知循环&#xff0c;使…

利用malloc定义数组

使用malloc方法时&#xff0c;应导入文件 #include<malloc.h> 1.利用malloc定义一维数组 int *num (int *)malloc(sizeof(int)*8); // 定义一个一维数组有8个元素&#xff0c;等价于 int num[8]; 2.利用malloc定义二维数组 int **num &#xff08; int **&#xff09…

C++中基类的析构函数为什么要用virtual虚析构函数

from&#xff1a;https://blog.csdn.net/iicy266/article/details/11906457知识背景要弄明白这个问题&#xff0c;首先要了解下C中的动态绑定。 关于动态绑定的讲解&#xff0c;请参阅&#xff1a; C中的动态类型与动态绑定、虚函数、多态实现 正题直接的讲&#xff0c;C中基类…