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

本文共 2043 字,大约阅读时间需要 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(否则拦截无法工作)。

请查看获取更多。

其他

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

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

本文转自tkbSimplest博客园博客,原文链接:http://www.cnblogs.com/farb/p/ABPMVCController.html,如需转载请自行联系原作者

你可能感兴趣的文章
RabbitMQ实例教程:用Java搞定工作队列
查看>>
安全管理平台未来的发展趋势【提要】
查看>>
Lync Server外部访问系列PART2:部署边缘
查看>>
为什么很多人努力了却死一地
查看>>
统一沟通-技巧-8-在internet上是否正常-1-For Exchange Server 2010
查看>>
一个不错的Cocos 1.6动画编辑器入门教程
查看>>
nagios监控三部曲之——nagios实现飞信报警(3)
查看>>
【COCOS2DX-LUA 脚本开发之十一】C/C++与Lua之间进行数据函数交互
查看>>
ISO27000系列标准
查看>>
CCID: 2012-2013年度中国信息安全产品市场研究年度报告
查看>>
智能化连接厨房——海尔馨厨冰箱初体验印象
查看>>
SQL Server 恢复场景示例
查看>>
Percona5.7 TokuBackup支持TokuDB热备份
查看>>
linux配置网络连接
查看>>
烂泥:KVM利用LVM快照备份与恢复虚拟机
查看>>
ytu 1064: 输入三个字符串,按由小到大的顺序输出(水题,字符串处理)
查看>>
PHP脚本不报错的两点原因
查看>>
Android 使用 Gmail 来发送邮件
查看>>
Canavs arcTo方法的理解
查看>>
SQLite操作(C# )
查看>>