ABP源码分析三十四:ABP.Web.Mvc
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.Web.Mvc的更多相关文章
- ABP源码分析三十:ABP.RedisCache
ABP 通过StackExchange.Redis类库来操作Redis数据库. AbpRedisCacheModule:完成ABP.RedisCache模块的初始化(完成常规的依赖注入) AbpRed ...
- ABP源码分析三十八: ABP.Web.Api.OData
如果对OData不熟悉的话可参考OData的初步认识一文以获取OData的一些初步知识. API.Odata 模块唯一用处就是提供了一个泛型版本的ODataController,实现了Controll ...
- ABP源码分析三十五:ABP中动态WebAPI原理解析
动态WebAPI应该算是ABP中最Magic的功能之一了吧.开发人员无须定义继承自ApiController的类,只须重用Application Service中的类就可以对外提供WebAPI的功能, ...
- ABP源码分析三十六:ABP.Web.Api
这里的内容和ABP 动态webapi没有关系.除了动态webapi,ABP必然是支持使用传统的webApi.ABP.Web.Api模块中实现了一些同意的基础功能,以方便我们创建和使用asp.net w ...
- ABP源码分析二十四:Notification
NotificationDefinition: 用于封装Notification Definnition 的信息.注意和Notification 的区别,如果把Notification看成是具体的消息 ...
- ABP源码分析三十二:ABP.SignalR
Realtime Realtime是ABP底层模块提供的功能,用于管理在线用户.它是使用SignalR实现给在线用户发送通知的功能的前提 IOnlineClient/OnlineClient: 封装在 ...
- ABP源码分析三十九:ABP.Hangfire
ABP对HangFire的集成主要是通过实现IBackgroundJobManager接口的HangfireBackgroundJobManager类完成的. HangfireBackgroundJo ...
- ABP源码分析三十一:ABP.AutoMapper
这个模块封装了Automapper,使其更易于使用. 下图描述了改模块涉及的所有类之间的关系. AutoMapAttribute,AutoMapFromAttribute和AutoMapToAttri ...
- ABP源码分析三十三:ABP.Web
ABP.Web模块并不复杂,主要完成ABP系统的初始化和一些基础功能的实现. AbpWebApplication : 继承自ASP.Net的HttpApplication类,主要完成下面三件事一,在A ...
随机推荐
- C语言 · 阶乘计算 · 基础练习
问题描述 输入一个正整数n,输出n!的值. 其中n!=1*2*3*-*n. 算法描述 n!可能很大,而计算机能表示的整数范围有限,需要使用高精度计算的方法.使用一个数组A来表示一个大整数a,A[0]表 ...
- 在 Laravel 中使用图片处理库 Integration/Image
系统需求 PHP >= 5.3 Fileinfo Extension GD Library (>=2.0) … or … Imagick PHP extension (>=6.5.7 ...
- Cocos2d Android 环境搭建
1.在开始之前,需要先准备好资源如下,如果安卓开发环境有了直接装第3.4. 1.JDK 点击下载 (1.6) 2.ADT(已经自带Android SDK)点击下载 3.NDK 点击下载 4. ...
- SELECT INTO 和 INSERT INTO SELECT 两种表复制语句
Insert是T-sql中常用语句,Insert INTO table(field1,field2,...) values(value1,value2,...)这种形式的在应用程序开发中必不可少.但我 ...
- C++随笔:.NET CoreCLR之GC探索(2)
首先谢谢 @dudu 和 @张善友 这2位大神能订阅我,本来在写这个系列以前,我一直对写一些核心而且底层的知识持怀疑态度,我为什么持怀疑态度呢?因为一般写高层语言的人99%都不会碰底层,其实说句实话, ...
- css中line-height行高的深入学习
之前对css中行高line-height的理解还是有些肤浅,深入后才发觉里面包罗万象.学习行高line-height,首先从基本原理开始 (标注该文章转载 http://www.cnblogs.com ...
- HTML5 Page Visibility
什么是 Page Visibility ? Page Visibility 即页面可见性,通过 visibilityState 的值检测页面当前是否可见.当一个网站是可见或点击选中的状态时 Page ...
- Android开发学习——动画
帧动画> 一张张图片不断的切换,形成动画效果* 在drawable目录下定义xml文件,子节点为animation-list,在这里定义要显示的图片和每张图片的显示时长 ...
- 如何使用dos命令查看MySQL当前使用的数据库?
1.dos命令安装mysqld --stall.启动net start mysql.进入MySQL数据库mysql -uroot -p后,输入select database(); 如图:
- 使用nginx反向代理,一个80端口下,配置多个微信项目
我们要接入微信公众号平台开发,需要填写服务器配置,然后依据接口文档才能实现业务逻辑.但是微信公众号接口只支持80接口(80端口).我们因业务需求需要在一个公众号域名下面,发布两个需要微信授权的项目,怎 ...