zoukankan      html  css  js  c++  java
  • ASP.NET 自定义路由 RouteBase

    适用场景:当前项目有一个接口:http://xxx.com/a.aspx,现在我们在不需要a.aspx这个文件的,直接处理这个地址的请求,我们可以做很多的事情,比如,直接返回一个静态的JSON文件内容。

    Global.asax全局配置文件添加路由表的注册

          protected void Application_Start(object sender, EventArgs e)
            {
                RouteTable.Routes.Ignore("{resource}.axd/{*pathInfo}");
                RouteTable.Routes.RouteExistingFiles = true;
                RouteTable.Routes.Add("Stocks", new MyRoute());
            }
    

    定制路由MyRoute 继承BouteBase

     public class MyRoute : RouteBase
        {
            public override RouteData GetRouteData(HttpContextBase httpContext)
            {
    
                //获取相对路径
                var virtualPath = httpContext.Request.AppRelativeCurrentExecutionFilePath;
    
                virtualPath = virtualPath.Substring(2).Trim('/');
    
                if (virtualPath.ToLower().Contains("a.aspx"))
                {
                    string name = httpContext.Request["name"];
    
                    var data = new RouteData(this, new MyRouteHandler());
                    data.Values.Add("name", name ?? "test");
                    return data;
                }
    
                //返回值为null,跳过此路由,进行下一个匹配
                return null;
            }
    
            public override VirtualPathData GetVirtualPath(RequestContext requestContext, RouteValueDictionary values)
            {
          
                return null;
            }
        }
    

    RouteHandler

       public class MyRouteHandler : IRouteHandler
        {
            public IHttpHandler GetHttpHandler(RequestContext requestContext)
            {
                return new MyHttpHandler(requestContext);
            }
        }
    

    HttpHandler 这里可以对Request请求做相应的业务处理

        public class MyHttpHandler : IHttpHandler
        {
            public RequestContext RequestContext { get; set; }
    
            public MyHttpHandler(RequestContext context)
            {
                RequestContext = context;
            }
    
            public void ProcessRequest(HttpContext context)
            {
                string name = RequestContext.RouteData.Values["name"].ToString();
    
                context.Response.ContentType = "application/json";
                context.Response.Charset = "utf-8";
                context.Server.Transfer("data.json");
                context.Response.End();
            }
    
            public bool IsReusable => false;
        }
    

    也可以直接使用HttpHandler,在web.config文件里配置处理请求,方式多种。

  • 相关阅读:
    数组的一些经典案例(循环)(max=score[0])(冒泡)(flag标志)(杨辉三角)
    冒泡排序
    C语言之数组
    循环结构的一些案例:倒等腰三角形、菱形、暴力破解
    break和contine关键字
    循环嵌套(打印*** ***)
    循环的经典案例(李白买酒)
    C语言循环结构-while/do...while/for--逢3过,阶乘,九九乘法表
    WordPress部署踩坑记
    Symbol
  • 原文地址:https://www.cnblogs.com/stealth7/p/6050357.html
Copyright © 2011-2022 走看看