我是靠谱客的博主 腼腆诺言,最近开发中收集的这篇文章主要介绍asp.net mv4 controller 跳转 静态html,ASP.NET MVCv 处理管线模型,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

MVC管道整体处理模型

7398d1987b4b04b875efa24e83b04574.png

1.在ASP.NET MVC处理管线中的第一站就是路由模块。当请求到达路由模块后,MVC框架就会根据Route Table中配置的路由模板来匹配当前请求以获得对应的controller和action信息。具体的匹配过程就是有UrlRoutingModule(System.Web.Routing.UrlRoutingModule)来实现的。

2.当ASP.NET MVC应用程序第一次启动的时候,路由系统就会把我们注册的路由规则(拦截哪些请求)加到Route Table中,一个应用程序包含一个Route Table,在Global.asax中的Application_Start事件中被创建:

fcecaa27ea5212ceb9bf034c36bfbf34.gif

public class RouteConfig

{

public static void RegisterRoutes(RouteCollection routes)

{

routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

routes.MapRoute(

name: "Default",

url: "{controller}/{action}/{id}",

defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }

);

}

}

protected void Application_Start()

{

RouteConfig.RegisterRoutes(RouteTable.Routes);

}

fcecaa27ea5212ceb9bf034c36bfbf34.gif

3.当UrlRoutingModule在Route Table中找到一条匹配的路由规则时,就会为这条路由规则寻找对应的IRouteHandler(System.Web.Mvc.IRouteHandler)实例(默认是System.Web.MvcRouteHandler),根据这个RouteHandler最后获取一个IHttpHandler的实例(默认是System.Web.MvcHandler)

public interface IRouteHandler

{

IHttpHandler GetHttpHandler(RequestContext requestContext);

}

Controller初始化

1.在MvcHandler中的ProcessRequest方法中就是ASP.NET MVC的生命周期,这个方法使用IControllerFactory的实例(默认是System.Web.Mvc.DefaultControllerFactory)来创建相应的controller:

fcecaa27ea5212ceb9bf034c36bfbf34.gif

protected internal virtual void ProcessRequest(HttpContextBase httpContext)

{

SecurityUtil.ProcessInApplicationTrust(delegate {

IController controller;

IControllerFactory factory;

this.ProcessRequestInit(httpContext, out controller, out factory);

try

{

controller.Execute(this.RequestContext);

}

finally

{

factory.ReleaseController(controller);

}

});

}

fcecaa27ea5212ceb9bf034c36bfbf34.gif

Action的执行

1.当controller创建之后,紧接着就会执行自己的InvokeAction()方法:

public virtual bool InvokeAction(ControllerContext controllerContext, string actionName)

2.当选择完合适的action后,接着就是model binders(默认是System.Web.Mvc.DefaultModelBinder),它会从http请求的参数中提取数据并实现类型转换,数据校验(例如是否必填,数据格式等)以及是否自动装配到action方法的参数中System.Web.Mvc.DefaultModelBinder

3.Authentication Filter是mvc5中新增的一个Filter,它会先于authorization filter执行,目的是对访问用户的认证。在MVC5之前,认证和授权都是通过authorization filter来实现的,但现在这2个操作就分开来了,各自管各自喽。

4.Action filters有2个方法OnActionExecuting和OnActionExecuted分别在action执行前后执行。我们也可以通过实现IActionFilter接口来实现你个性化的过滤机制

5.接下来就是执行我们平时在action方法中写的代码了(根据请求相应结果)

ActionResult的执行

1.在ActionResult执行前后,仍然会有一个filter(ResultFilter),同样的,通过实现IResultFilter接口你可以定制自己的过滤逻辑。

2.ActionResult就是把BAL DAL处理的用户请求结果返回。因此ViewResult, PartialViewResult, RedirectToRouteResult, RedirectResult, ContentResult, JsonResult, FileResult and EmptyResult就是具体的返回类型

3.上面的返回类型可以大致分为2类:ViewResult和非ViewResult。对于需要生成html页面给客户端的划到ViewResult,而其他的例如返回文本,json数据等则划分到非ViewResult,对于非ViewResult直接返回就可以了。

View的初始化和渲染呈现

1.对于ViewResult最终是由合适的View Engine通过调用IView的Render()方法来渲染View的:

public interface IView

{

void Render(ViewContext viewContext, TextWriter writer);

}

2.整个处理过程是由IViewEngine(System.Web.Mvc.IViewEngine)来实现的。ASP.NET MVC 默认提供webform(.aspx)和Razor(.cshtml)模板引擎,你可以通过实现IViewEngine接口来实现你自己的ViewEngine,然后在Application_Start方法中做如下注册:

fcecaa27ea5212ceb9bf034c36bfbf34.gif

protected void Application_Start()

{

//移除所有的View引擎包括Webform和Razor

ViewEngines.Engines.Clear();

//注册你自己的View引擎

ViewEngines.Engines.Add(new CustomViewEngine());

}

fcecaa27ea5212ceb9bf034c36bfbf34.gif

3.最后,Html Helpers将帮我们生成input标签,基于AJAX的form等等。Html Helpers是HtmlHelper类的扩展方法,因此想要进一步扩展也是非常容易的。

总结

整个流程做了一个简单的介绍,算是对自己学习MVC的一次总结和回顾,也希望帮助你在以后更好的使用和扩展MVC。

转自:http://www.cnblogs.com/fzrain/p/3651693.html

原文:https://www.cnblogs.com/yaoweijun/p/10196551.html

最后

以上就是腼腆诺言为你收集整理的asp.net mv4 controller 跳转 静态html,ASP.NET MVCv 处理管线模型的全部内容,希望文章能够帮你解决asp.net mv4 controller 跳转 静态html,ASP.NET MVCv 处理管线模型所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(54)

评论列表共有 0 条评论

立即
投稿
返回
顶部