.net Mvc 程序通過Route攔截,實(shí)現(xiàn)網(wǎng)站白名單

在實(shí)施路由攔截之前,通過下圖先了解當(dāng)請(qǐng)求到達(dá)Mvc程序后數(shù)據(jù)如何在管道中流動(dòng):


http請(qǐng)求.png

此過程將分為三步:

1.通過繼承“RouteBase”來自定義用于我們自己的Route:

public class CustomRout : RouteBase
{
    //白名單集合
    List<string> hosts = new List<string>()
    public override RouteData GetRouteData(HttpContextBase httpContext)
    {
        //通過“UserAgent”判斷瀏覽器版本實(shí)施攔截
        //if (httpContext.Request.UserAgent.Contains("Mozilla/5.0 (Windows NT 10.0; Win64; x64)"))
        //{
            //return null;
        //}
       if (hosts.FindIndex(h => h == httpContext.Request.Url.Host) > 0) 
       {
              //不做攔截處理
              return null;
        }
        else
        {
            //跳轉(zhuǎn)到指定頁(yè)面
            var routData = new RouteData(this, new MvcRouteHandler());
            routData.Values.Add("controller", "Pipe");
            routData.Values.Add("action", "Refuse");
            return routData;
        }
    }
    public override VirtualPathData GetVirtualPath(RequestContext requestContext, RouteValueDictionary values)
    {
        return null;
    }
}

注:下圖是通過反編譯源代碼后,框架里創(chuàng)建Route方式,因此可以借鑒來創(chuàng)建自己的Route

創(chuàng)建Route.png

2.將自定義Route在“RouteConfig.cs”文件中進(jìn)行注冊(cè):

public class RouteConfig
{
    public static void RegisterRoutes(RouteCollection routes)  //配置路由
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); //忽略路由         
        routes.Add("chrome", new CustomRout());
        routes.MapRoute( //常規(guī)路由 
            url: "{controller}/{action}/{id}",
            name: "Default", //路由名稱  被作為路由集合的Key  this[int index]  不能重復(fù)
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
        );
    }
}

3.Route匹配:


匹配路由.png

注:通過上面的代碼將Route注冊(cè)到RouteCollection集合中去后,框架會(huì)遍歷該集合,一旦找到匹配Route,立即返回。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • ASP.NET是使用HTML、CSS、JS和服務(wù)端腳本創(chuàng)建Web頁(yè)面和網(wǎng)站的開發(fā)框架。 ASP.NET支持三種開發(fā)...
    JunChow520閱讀 1,796評(píng)論 0 2
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,568評(píng)論 19 139
  • ASP.NET MVC是如何運(yùn)行的 ASP.NET MVC由于采用了管道式設(shè)計(jì),所以具有很好的擴(kuò)展性,整個(gè)ASP....
    JunChow520閱讀 408評(píng)論 0 0
  • 當(dāng)前,MVC作為一種主流框架,被廣泛運(yùn)用,如JAVA Web開發(fā),.NET ASP,NET MVC (1)MVC由...
    Kaiweio閱讀 957評(píng)論 0 4
  • 漸變的面目拼圖要我怎么拼? 我是疲乏了還是投降了? 不是不允許自己墜落, 我沒有滴水不進(jìn)的保護(hù)膜。 就是害怕變得面...
    悶熱當(dāng)乘涼閱讀 4,480評(píng)論 0 13

友情鏈接更多精彩內(nèi)容