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