欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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、注冊(cè)路由規(guī)則

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

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

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

3、UrlRoutingModule處理url請(qǐng)求,輸出MvcHandler以處理HTTP請(qǐng)求

UrlRoutingModule實(shí)現(xiàn)IHttpModule接口,對(duì)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)前請(qǐ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,用于對(duì)當(dāng)前HTTP請(qǐng)求的處理
        httpContext.RemapHandler(handler);
    }
}

IRouteHandler是什么?

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

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

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

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

MvcHandler是MVC中IHttpHandler的默認(rèn)實(shí)現(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);
    }
}

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

相關(guān)文章

  • ASP.net連接Excel的代碼

    ASP.net連接Excel的代碼

    ASP.net連接Excel的代碼,這個(gè)是asp.net操作excel必須知道的基礎(chǔ),另外的技巧可以參考腳本之家之前發(fā)布的文章。
    2010-03-03
  • ASP.NET MVC使用正則表達(dá)式驗(yàn)證手機(jī)號(hào)碼

    ASP.NET MVC使用正則表達(dá)式驗(yàn)證手機(jī)號(hào)碼

    這篇文章介紹了ASP.NET MVC使用正則表達(dá)式驗(yàn)證手機(jī)號(hào)碼的方法,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-09-09
  • asp.net獲取SQL所有數(shù)據(jù)庫(kù)名、所有表名、所有字段名

    asp.net獲取SQL所有數(shù)據(jù)庫(kù)名、所有表名、所有字段名

    asp.net獲取SQL所有數(shù)據(jù)庫(kù)名、所有表名、所有字段名...
    2007-03-03
  • log4net創(chuàng)建系統(tǒng)日志的詳細(xì)步驟

    log4net創(chuàng)建系統(tǒng)日志的詳細(xì)步驟

    log4net是.Net下一個(gè)非常優(yōu)秀的開源日志記錄組件。log4net記錄日志的功能非常強(qiáng)大。它可以將日志分不同的等級(jí),以不同的格式,輸出到不同的媒介。本文主要是簡(jiǎn)單的介紹如何在Visual Studio2010(Asp.Net Mvc3.0)中使用log4net快速創(chuàng)建系統(tǒng)日志,如何擴(kuò)展以輸出自定義字段
    2013-11-11
  • ASP.NET Core 7 Razor Pages項(xiàng)目發(fā)布到IIS的詳細(xì)過程

    ASP.NET Core 7 Razor Pages項(xiàng)目發(fā)布到IIS的詳細(xì)過程

    這篇文章主要介紹了ASP.NET Core 7 Razor Pages項(xiàng)目發(fā)布到IIS的詳細(xì)過程,詳細(xì)介紹了發(fā)布過程遇到的問題及解決方法,對(duì)ASP.NET Core 發(fā)布到IIS相關(guān)知識(shí)感興趣的朋友一起看看吧
    2023-01-01
  • ASP.NET Core中如何利用Csp標(biāo)頭對(duì)抗Xss攻擊

    ASP.NET Core中如何利用Csp標(biāo)頭對(duì)抗Xss攻擊

    這篇文章主要給大家介紹了關(guān)于ASP.NET Core中如何利用Csp標(biāo)頭對(duì)抗Xss攻擊的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用ASP.NET Core具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • Asp.Net Core利用文件監(jiān)視進(jìn)行快速測(cè)試開發(fā)詳解

    Asp.Net Core利用文件監(jiān)視進(jìn)行快速測(cè)試開發(fā)詳解

    這篇文章主要給大家介紹了關(guān)于Asp.Net Core利用文件監(jiān)視進(jìn)行快速測(cè)試開發(fā)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-12-12
  • 關(guān)于.net環(huán)境下跨進(jìn)程、高頻率讀寫數(shù)據(jù)的問題

    關(guān)于.net環(huán)境下跨進(jìn)程、高頻率讀寫數(shù)據(jù)的問題

    最近老大教給我一個(gè)項(xiàng)目,項(xiàng)目要求高頻次地讀寫數(shù)據(jù),數(shù)據(jù)量也不是很大,難點(diǎn)在于這個(gè)規(guī)模的熱點(diǎn)數(shù)據(jù),變化非常頻繁,下面把我的處理方法分享到腳本之家平臺(tái),對(duì).net跨進(jìn)程高頻率讀寫數(shù)據(jù)相關(guān)知識(shí)感興趣的朋友跟隨小編一起學(xué)習(xí)下吧
    2021-05-05
  • ASP.NET MVC異常過濾器用法

    ASP.NET MVC異常過濾器用法

    本文詳細(xì)講解了ASP.NET MVC異常過濾器的用法,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-03-03
  • 詳解ASP.NET頁(yè)面生命周期事件

    詳解ASP.NET頁(yè)面生命周期事件

    這篇文章介紹了ASP.NET頁(yè)面生命周期事件,有需要的朋友可以參考一下
    2013-07-07

最新評(píng)論