【转】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源碼分析系列文章目錄
?
我發現在controller上面加上AbpMvcAuthorizeAttribute,再在Action上使用AbpAllowAnonymousAttribute,沒有效果,一定要同時加上Mvc的AllowAnonymousAttribute才可以訪問到。那么問題來了,
1.Abp是不是推薦使用在ApplicationService上面的方法做授權驗證?
2.在Mvc或者WebApi上面,有什么方法可以不用同時加上Abp和Mvc的AllowAnonymous,就可以匿名訪問?
官網已經在11月28日做了修正
Should check AllowAnonymousAttribute on authorization filters,請下載最新版本,謹防大家踩坑。。。
總結
以上是生活随笔為你收集整理的【转】ABP源码分析三十四:ABP.Web.Mvc的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 曝小米新款自研芯片要来了!小米12 Ul
- 下一篇: 马斯克喊话特斯拉死敌Rivian、Luc