最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

ASP.NET?MVC實現(xiàn)路由功能

 更新時間:2022年08月01日 08:45:04   作者:Darren?Ji  
這篇文章介紹了ASP.NET?MVC實現(xiàn)路由功能的方法,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下

1、定義路由、路由規(guī)則

        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 }
            );
        }

路由是什么?

Route派生于RouteBase基類,如下:

路由能提供什么?

● 通過路由的GetRouteData()方法,獲取到封裝路由信息的RouteData類型;
● 通過路由的Constraints屬性獲取路由約束;
......

MapRoute()是RouteCollection的擴(kuò)展方法:

RouteCollection是什么?

RouteCollection是RouteBase的集合類。

2、注冊路由規(guī)則

在全局文件中注冊路由規(guī)則:

    public class MvcApplication : System.Web.HttpApplication
    {
        protected void Application_Start()
        {
            ......
            RouteConfig.RegisterRoutes(RouteTable.Routes);
            ......
        }
    }

原來,所有的路由規(guī)則都存放在RouteTable中類型為RouteCollection的Routes屬性中了。

3、UrlRoutingModule處理url請求,輸出MvcHandler以處理HTTP請求

UrlRoutingModule實現(xiàn)IHttpModule接口,對HttpApplication的PostResolveRequest事件進(jìn)行偵聽:

public class UrlRoutingModule : IHttpModule
{
    public void Init(HttpApplication context)
    {
        context.PostResolveRequestCache += OnPostResolveRequestCache;
    }

    portected virtual void OnPostResolveRequestCache(object sender, EventArgs e)
    {
        //把當(dāng)前上下文封裝
        HttpContextWrapper httpContext = new HttpContextWrapper(HttpContext.Current);

        //獲取當(dāng)前請求中的RouteData類型
        RouteData routeData = RouteTable.Routes.GetRouteData(httpContext);
        if(routeData == null)
        {
            return;
        }

        //把routeData再封裝起來
        RequestContext requestContext = new RequestContext{
            RouteData = routeData,
            HttpContext = httpContext
        };

        //從RouteData的RouteHandler屬性獲取IRouteHandler類型
        //IRouteHandler的GetHttpHandler()方法獲取IHttpHandler
        IHttpHandler handler = routeData.RouteHandler.GetHttpHandler(requestContext);

        //為當(dāng)前上下文設(shè)置HttpHandler,用于對當(dāng)前HTTP請求的處理
        httpContext.RemapHandler(handler);
    }
}

IRouteHandler是什么?

他的唯一職責(zé)是生產(chǎn)IHttpHandler實例。

public interface IRouteHandler
{
    IHttpHandler GetHttpHandler(RequestContext requestContext);
}

在MVC中默認(rèn)使用的是MvcRouteHandler,是IRouteHandler的實現(xiàn),返回類型為IHttpHandler的MvcHandler:

public class MvcRouteHandler : IRouteHander
{
    public IHttpHandler GetHttpHandler(RequestContext requestContext)
    {
        return new MvcHandler(requestContext);
    }
}

MvcHandler是MVC中IHttpHandler的默認(rèn)實現(xiàn)

public class MvcHandler : IHttpHandler
{
    publci bool IsReusable{get {return false;}}

    public RequestContext RequestContext{get; private set;}

    public MvcHandler(RequestContext requestContext)
    {
        this.RequestContext = requestContext;
    }

    public void ProcessRequest(HttpContext context)
    {
        string controllerName = this.RequestContext.RouteData.Controller;
        IControllerFactory controllerFactory = COntrollerBuilder.Current.GetControllerFactory();
        IController controller = controllerFactory.CreateController(this.RequestContext, controllerName);
        controller.execute(this.RequestContext);
    }
}

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,謝謝大家對腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請查看下面相關(guān)鏈接

相關(guān)文章

最新評論

紫金县| 宁远县| 如东县| 崇义县| 中牟县| 延津县| 延长县| 德阳市| 安远县| 长子县| 靖远县| 石景山区| 福安市| 原平市| 宁陕县| 新乡县| 蚌埠市| 乐平市| 通道| 金昌市| 南城县| 贵德县| 上杭县| 遵义县| 云和县| 乃东县| 安平县| 定南县| 两当县| 宝清县| 营山县| 天等县| 泰和县| 桂平市| 嘉荫县| 广元市| 嘉黎县| 乌恰县| 栾川县| 浏阳市| 广南县|