從C#角度 理解MVC原理


從C#角度 理解MVC原理:從view上請求到controller組織model,反映到view上

1、請求被UrlRoutingModule部件攔截——通過在Init()方法里注冊HttpApplication對象的PostResolveRequestCache事件來實現攔截;

2、封裝請求上下文HttpContext,成為HttpContextWrapper對象——UrlRoutingModule的Init()方法中調用事件;

3、根據當前HttpContext,從Routes集合中得到與當前請求URL相符合的RouteData對象——UrlRoutingModule的PostResolveRequestCache()方法;

4、將HttpContext請求和RouteData對象封裝成RequestContext對象——UrlRoutingModule的PostResolveRequestCache()方法;

5、根據RequestContext對象,從RouteData的RouteHandler中獲取IHttpHandeler——routeData.RouteHandler.GetHttpHandler(RequestContext)方法返回的是MVCHandler(繼承IHttpHandler);

6、把請求交給MvcHandler(繼承IHttpHandler)——context.RemapHandler(httpHandler),去執行IHttpHandler 的ProcessRequest(context)方法,處理http請求;

7、通過反射激活具體controller,執行具體action,返回model數據,顯示在視圖上。

{

7.1 ProcessRequestInit()方法,獲取當前上下文HttpContext;

7.2 從路由對象RouteData中獲取當前請求Controller名稱——this.RequestContext.RouteData.GetRequiredString("controller");

7.3 獲取Controller工廠對象;

7.4 根據RequestContext請求和Controller名稱,從Controller工廠創建具體Controller對象;

7.5 執行控制器的Action——controller.Execute(context.Request.RequestContext) { requestContext.RouteData.GetRequiredString("action");}

}

總結: UrlRoutingModule攔截http請求,根據HttpContext請求,從RouteCollection中,找到RouteData對象,把請求和對象封裝為RequestContext請求,再從RouteData對象找到MvcHandler,由UrlRoutingModule轉到了MvcHandler;MvcHandler根據HttpContext,從RouteData對象中獲取當前請求Controller名稱,獲取Controller工廠對象,創建具體Controller對象,執行具體action,返回model數據,顯示在視圖上。

 

注:大家可以參考 懶得安分 博主的mvc原理,講得太好了。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM