博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ABP理论学习之MVC控制器(新增)
阅读量:6294 次
发布时间:2019-06-22

本文共 1953 字,大约阅读时间需要 6 分钟。


本篇目录

介绍

ABP通过Abp.Web.Mvc nuget包集成了ASP.NET MVC控制器。你可以像常规那样创建MVC控制器。依赖注入对于常规的MVC控制器可以正确地工作。

但是,你应该让你的控制器继承于AbpController,该基类控制器提供了很多有用的东西,而且更好地集成到了ABP中。

AbpController基类

下面是一个派生自AbpController的简单控制器:

public class HomeController : AbpController{    public ActionResult Index()    {        return View();    }}

本地化

AbpController中定义了L方法使得本地化更加简单。例子:

public class HomeController : AbpController{    public HomeController()    {        LocalizationSourceName = "MySourceName";    }        public ActionResult Index()    {        var helloWorldText = L("HelloWorld");                return View();    }}

要使L方法生效,必须设置LocalizationSourceName。你可以在自己的控制器基类中设置而不用在每个控制器中都重复设置。

异常处理

异常都是自动处理的,自动记录日志,而且会给客户端返回一个合适的响应。

查看博客获得更多信息。

响应结果的包装

如果返回类型是JsonResult(或者异步action方法的Task),ABP会默认封装该action方法的响应结果。你可以通过为控制器或者actions使用WrapResult和DontWrapResult特性来更改默认的封装(注意:以前有园友经常问到这个)。

查看博客获取更多信息。

审计日志

如果你从AbpController派生控制器的话,那么审计日志会自动记录。

查看博客获取更多信息。

授权

你可以为控制器或者action方法使用AbpMvcAuthorize特性来阻止未授权的用户使用控制器和action方法。例子:

public class HomeController : AbpController{    [AbpMvcAuthorize("MyPermissionName")]    public ActionResult Index()    {        return View();    }}

AbpApiController也定义了检查权限的IsGranted方法作为快捷方式。请查看一节获取更多信息。

工作单元

MVC的action方法默认不是工作单元。例如,如果你需要在action方法中打开数据库连接,就需要像下面那样声明UnitOfWork特性:

public class HomeController : AbpController{    private readonly IRepository
_userRepository; public HomeController(IRepository
userRepository) { _userRepository = userRepository; } [UnitOfWork] public virtual ActionResult Users(string filter) { var users = _userRepository .GetAll() .Where(u => u.UserName.StartsWith(filter)) .ToList(); return View(users); }}

这里我们声明了UnitOfWork特性。因为仓储的 GetAll()方法返回了 IQueryable,而当它使用 ToList()方法(由于IQueryable的延迟执行)时需要一个打开的数据库连接,所以这里需要声明该特性。注意该action方法应该声明为virtual(否则拦截无法工作)。

请查看获取更多。

其他

你还可以使用预注入的 , , , , , , , , , 等基属性以及更多。

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

转载地址:http://wxpta.baihongyu.com/

你可能感兴趣的文章
Java中Object类的equals()和hashCode()方法深入解析
查看>>
数据库
查看>>
dojo.mixin(混合进)、dojo.extend、dojo.declare
查看>>
Python 数据类型
查看>>
iOS--环信集成并修改头像和昵称(需要自己的服务器)
查看>>
PHP版微信权限验证配置,音频文件下载,FFmpeg转码,上传OSS和删除转存服务器本地文件...
查看>>
教程前言 - 回归宣言
查看>>
PHP 7.1是否支持操作符重载?
查看>>
Vue.js 中v-for和v-if一起使用,来判断select中的option为选中项
查看>>
Java中AES加密解密以及签名校验
查看>>
定义内部类 继承 AsyncTask 来实现异步网络请求
查看>>
VC中怎么读取.txt文件
查看>>
如何清理mac系统垃圾
查看>>
企业中最佳虚拟机软件应用程序—Parallels Deskto
查看>>
Nginx配置文件详细说明
查看>>
怎么用Navicat Premium图标编辑器创建表
查看>>
Spring配置文件(2)配置方式
查看>>
MariaDB/Mysql 批量插入 批量更新
查看>>
ItelliJ IDEA开发工具使用—创建一个web项目
查看>>
solr-4.10.4部署到tomcat6
查看>>