ABP理论学习之MVC控制器(新增)
本篇目录
介绍###
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
查看ajax博客获取更多信息。
审计日志
如果你从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<User, long> _userRepository;
public HomeController(IRepository<User, long> 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(否则拦截无法工作)。
请查看工作单元获取更多。
其他
你还可以使用预注入的 AbpSession, EventBus, PermissionManager, PermissionChecker, SettingManager, FeatureManager, FeatureChecker, LocalizationManager, Logger, CurrentUnitOfWork等基属性以及更多。
要了解以上属性,请查阅其他相应博客。
相关文章
- javaWeb学习总结(8)- JSP标签(6)
- Docker 原理、学习教程
- abp(net core)+easyui+efcore实现仓储管理系统——ABP WebAPI与EasyUI结合增删改查之七(三十三)
- abp(net core)+easyui+efcore实现仓储管理系统——ABP WebAPI与EasyUI结合增删改查之一(二十七)
- abp(net core)+easyui+efcore实现仓储管理系统——ABP总体介绍(一)
- 轻松学习JavaScript十四:JavaScript的RegExp对象(正則表達式)
- matlab学习笔记10_7数值计算类型和常用计算公式
- 基于强化学习PPO(Proximal Policy Optimization)算法的无人机姿态控制系统
- 大数据与机器学习:实践方法与行业案例3.4 自动加载程序的多线程实现
- CSDN日报190924:深度学习、开发干货分享
- Hbase 学习(九) 华为二级索引(原理)
- 【前端学习之HTML&CSS进阶篇】-- CSS第一篇 -- @规则与web字体图标
- Chainer的初步学习
- pthread多线程编程的学习小结
- ABP理论学习之通知系统
- ABP理论学习之OWIN集成
- ABP理论学习之功能管理
- ABP理论学习之数据传输对象(DTO)
- ABP理论学习之事件总线和领域事件
- ABP理论学习之内嵌资源文件
- ABP理论学习之NHibernate集成
- ABP理论学习之缓存Caching
- ABP理论学习之发布说明
- (数据科学学习手札55)利用ggthemr来美化ggplot2图像
- 学科基本结构理论-布鲁纳学习理论
- Java学习-075-多线程08:线程优先级 Thread.setPriority(Thread.MAX_PRIORITY)
- ABP实践学习
- 《计算机视觉:模型、学习和推理》——1.1 本书结构
- 深度强化学习算法(深度强化学习框架)为考虑可以快速适用多种深度学习框架建议采用弱耦合的软件设计方法——快速适用于多种深度学习计算框架的深度强化学习框架设计方案
- Python学习---文件操作的学习1208
- Rxjava学习(三线程调度器Scheduler)
- Maya 学习资料
- Ubuntu 64bit下手动安装深度学习包Caffe记录(CPU)