ABP.Web.Mvc模块主要完成两个任务:

第一,通过自定义的AbpController抽象基类封装ABP核心模块中的功能,以便利的方式提供给我们创建controller使用。

第二,一些常见的基础功能的实现。

AbpController:这是一个抽象基类,继承自MVC Controller,是ABP系统中所有controller的基类。如下图中,其封装了ABP核心模块中提供的大多数的功能。同时实现了一些公共的方法。它有三个派生类:AbpAppViewController,AbpScriptsController,AbpLocalizationController。

AbpWebViewPage<TModel> ,AbpWebViewPage:继承自MVC的WebViewPage。他们是ABP系统中所有view的基类。实现了一些通用逻辑:比如本地化。

ControllerConventionalRegistrar:继承自IConventionalDependencyRegister,register 所有controller的派生类。

AbpWebMvcModule:继承自AbpModule,完成Abp.Web.MVC模块的初始化。初始化主要干两件事:

第一件事,Register Assembly by convention,这是所有模块都要在初始化执行的动作。

第二件事,使用自定义的的WindsorControllerFactory替换MVC默认的DefaultControllerFactory,以实现Controller的依赖注入。

WindsorControllerFactory: 继承自DefaultControllerFactory,重写了ReleaseController和GetControllerInstance方法来管理Controller对象。

ErrorViewModel:封装了ErrorInfo和Exception类型的属性。

MvcAjaxResponse<TResult>,MvcAjaxResponse:用于封装针对ajax requests的Response信息。继承自AjaxResponse<TResult>,添加了一个TargetUrl属性,没有重写基类中的方法。

AbpMvcAuthorizeAttribute:实现IAbpAuthorizeAttribute接口,继承Mvc的AuthorizeAttribute,并重写AuthorizeCore方法。 提供permissions的设置。

AbpLocalizationController:继承自AbpController,添加了ChangeCulture方法用于更改语言设置。并将语言设置保存在Cookie中。

AbpAppViewController:继承自AbpController,根据viewUrl返回一个view.

AbpScriptsController:继承自AbpController,添加了GetScripts方法返回一段javascript代码,该代码中的相应的JS对象包含当前访问用户的所有Permission信息,Navigation信息,session信息,setting信息,当前MultiTenancy的配置信息,当前访问用户的Tenant的所有Feature信息。

ActionDescriptorHelper:返回ActionDescriptor的methodInfo

AbpJsonResult:继承自Newtonsoft的JsonResult。配置将CLR对象序列化为CamelCase的json 对象。

EmbeddedResourceRouteHandler : 实现了MVC的IRouteHandler的GetHttpHandler方法。 返回自定义的IHttpHandler对象EmbeddedResourceHttpHandler

EmbeddedResourceHttpHandler:实现了MVC的IHttpHandler的ProcessRequest方法。根据RouteData中pathInfo指定的文件路径,返回对应的文件。

WebResourceHelper:为嵌入型的资源文件请求创建路由规则,和指定其RouteHandler为EmbeddedResourceRouteHandler。嵌入型的资源文件是指嵌入到assembly中的JS和Css资源.

HtmlHelperResourceExtensions: 扩展了HtmlHelper类,添加了IncludeScript和IncludeStyle方法。这连个方法如下。有何用?主要用于防止客户端读取其缓存在本地的Js和Css文件,而这些文件在server端又存在更新的版本。

实际项目中的用法如下:

返回ABP源码分析系列文章目录

ABP源码分析三十四:ABP.Web.Mvc的更多相关文章

  1. ABP源码分析三十:ABP.RedisCache

    ABP 通过StackExchange.Redis类库来操作Redis数据库. AbpRedisCacheModule:完成ABP.RedisCache模块的初始化(完成常规的依赖注入) AbpRed ...

  2. ABP源码分析三十八: ABP.Web.Api.OData

    如果对OData不熟悉的话可参考OData的初步认识一文以获取OData的一些初步知识. API.Odata 模块唯一用处就是提供了一个泛型版本的ODataController,实现了Controll ...

  3. ABP源码分析三十五:ABP中动态WebAPI原理解析

    动态WebAPI应该算是ABP中最Magic的功能之一了吧.开发人员无须定义继承自ApiController的类,只须重用Application Service中的类就可以对外提供WebAPI的功能, ...

  4. ABP源码分析三十六:ABP.Web.Api

    这里的内容和ABP 动态webapi没有关系.除了动态webapi,ABP必然是支持使用传统的webApi.ABP.Web.Api模块中实现了一些同意的基础功能,以方便我们创建和使用asp.net w ...

  5. ABP源码分析二十四:Notification

    NotificationDefinition: 用于封装Notification Definnition 的信息.注意和Notification 的区别,如果把Notification看成是具体的消息 ...

  6. ABP源码分析三十二:ABP.SignalR

    Realtime Realtime是ABP底层模块提供的功能,用于管理在线用户.它是使用SignalR实现给在线用户发送通知的功能的前提 IOnlineClient/OnlineClient: 封装在 ...

  7. ABP源码分析三十九:ABP.Hangfire

    ABP对HangFire的集成主要是通过实现IBackgroundJobManager接口的HangfireBackgroundJobManager类完成的. HangfireBackgroundJo ...

  8. ABP源码分析三十一:ABP.AutoMapper

    这个模块封装了Automapper,使其更易于使用. 下图描述了改模块涉及的所有类之间的关系. AutoMapAttribute,AutoMapFromAttribute和AutoMapToAttri ...

  9. ABP源码分析三十三:ABP.Web

    ABP.Web模块并不复杂,主要完成ABP系统的初始化和一些基础功能的实现. AbpWebApplication : 继承自ASP.Net的HttpApplication类,主要完成下面三件事一,在A ...

随机推荐

  1. c#与java的区别

    经常有人问这种问题,用了些时间java之后,发现这俩玩意除了一小部分壳子长的还有能稍微凑合上,基本上没什么相似之处,可以说也就是马甲层面上的相似吧,还是比较短的马甲... 一般C#多用于业务系统的开发 ...

  2. 【每日一linux命令3】参数(或称选项)顺序

    一般除了特殊情况,参数是没有顺序的.举例而言,输入"–a –v"与输入"–v –a"以及"–av" 的执行效果是相同的.但若该参数后指定了要 ...

  3. HTML5 Boilerplate - 让页面有个好的开始

    最近看到了HTML5 Boilerplate模版,系统的学习与了解了一下.在各种CSS库.JS框架层出不穷的今天,能看到这么好的HTML模版,感觉甚爽.写篇博客,推荐给大家使用.   一:HTML5 ...

  4. 从Script到Code Blocks、Code Behind到MVC、MVP、MVVM

    刚过去的周五(3-14)例行地主持了技术会议,主题正好是<UI层的设计模式——从Script.Code Behind到MVC.MVP.MVVM>,是前一天晚上才定的,中午花了半小时准备了下 ...

  5. .Net语言 APP开发平台——Smobiler学习日志:手机应用的TextTabBar快速实现方式

    参考页面: http://www.yuanjiaocheng.net/webapi/create-crud-api-1-put.html http://www.yuanjiaocheng.net/we ...

  6. Javascript高性能编程-提高Dom访问速度

    在浏览器中对于Dom的操作和普通的脚本的操作处于两个不同的dll中,两个dll的交互是比较耗时的,优化对Dom的操作可以提高脚本的执行速度.下面是对如何优化的一些总结: 将需要多次操作的节点存储在一个 ...

  7. 【SAP业务模式】之ICS(五):定价配置

    本篇博文讲述ICS业务中的定价配置. 1.定义销售订单类型 目录:SPRO-销售与分销-销售-销售凭证-销售凭证抬头-定义销售凭证类型 事务代码:VOV8 2.定义销售订单类型 目录:SPRO-销售与 ...

  8. angular2之前端篇—1(node服务器分支)

    上一篇.net core和angular2之前端篇-1 使用的是dotnet模板.之所以用它,因为想用他写webapi,但是写道下一篇的时候遇到点问题,所以先写个分支测试一下.这次是用Node作为服务 ...

  9. Ubuntu 16.04 安装 arm-linux-gcc 嵌入式交叉编译环境 问题汇总

    闲扯: 实习了将近半年一直在做硬件以及底层的驱动,最近要找工作了发现了对linux普遍要求很高,而且工作岗位也非常多,所以最近一些时间在时不时地接触linux. 正文:(我一时兴起开始写博客,准备不充 ...

  10. 项目游戏开发日记 No.0x000001

    14软二杨近星(2014551622) 既然已经决定了开发软件, 时不时就要练练手, 还要时不时的去寻找素材, 因为开发的人物设定就是DotA2里面的祈求者, 所以, 就去找了他的相关人物图片和模型, ...