ASP.NET MVC Route的幾種配置方法


1.使用httpContext.Request.UserAgent(俗稱UA)來過濾傳進來的Url請求,在RegisterRoutes里Add如何路由:

  routes.Add("chrome", new ElevenRoute());

public class ElevenRoute : RouteBase //擴展這個類
    {
        public override RouteData GetRouteData(HttpContextBase httpContext)
        {
            if (httpContext.Request.UserAgent.IndexOf("Chrome/") >= 0)//通過拿到http的上下文,為所欲為,判斷請求進來的瀏覽器版本,來過濾用戶請求等等。
            {
                return null;
            }
            else
            {
                RouteData routeData = new RouteData(this, new MvcRouteHandler());
                routeData.Values.Add("controller", "Home");
                routeData.Values.Add("action", "Refuse");
                return routeData;
            }
        }
        public override VirtualPathData GetVirtualPath(RequestContext requestContext, RouteValueDictionary values)
        {
            return null;
        }
    }

2.使用固定的Url訪問服務器上的文件,一般用於不給員工開訪問服務器的權限,但是要查看服務器上的日志,怎么辦。

routes.Add("Eleven", new Route("Eleven/201903042135", new ElevenRouteHandler()));

public class ElevenRouteHandler : IRouteHandler //擴展RouteHandler
    {
        public IHttpHandler GetHttpHandler(RequestContext requestContext)
        {
            return new ElevenHttpHandler();
        }
    }
    public class ElevenHttpHandler : IHttpHandler
    {
        public bool IsReusable => true;

        public void ProcessRequest(HttpContext context)
        {
            context.Response.ContentType = "text/html";
            //context.Response.Write("This is Eleven's Framework");
            string text = File.ReadAllText(context.Server.MapPath("~/Web.Config"));
            context.Response.Write(text);
            context.Response.End();
            //context.Response.Write($"Now is {DateTime.Now.ToShortTimeString()}");
        }
    }

3.匹配以Brad開頭的地址,控制器就用Home(defaults的作用就是,當你輸入http://localhost:8088/Brad的時候,匹配的還是http://localhost:8088/Home)

routes.MapRoute(
                name: "Brad",
                url: "Brad/{action}/{id}",
                defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
            );//1 匹配以Brad開頭的地址,控制器就用Home

4.寫死了WYD就訪問Home/About

routes.MapRoute(
                name: "WYD",
                url: "WYD",
                defaults: new { controller = "Home", action = "About", id = UrlParameter.Optional }
            );

5.從Url中直接讀取年月日參數

routes.MapRoute(
               name: "Regex",
               url: "{controller}/{action}_{Year}_{Month}_{Day}",
               defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional },
               constraints: new { Year = @"^\d{4}", Month = @"^\d{2}", Day = @"^\d{2}", }
           );
public string Format(int year, int month, int day)
        {
            return $"This is {year}-{month}-{day}";
        }

 


免責聲明!

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



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