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文件里配置处理请求,方式多种。

  • 相关阅读:
    [转]iOS多线程编程之NSThread的使用
    IOS 本地通知
    IOS 使用程序外地图(IOS Map and google Map)
    syq小姐姐的分享的历年考试经验
    对拍——我认为的最简写法
    对拍——我目前可以找到的最简写法
    数论板子——来自Loi_black
    一些神奇的(优化)板子——来自Loi_black的博客
    马拉车——模版+KMP——模版
    国庆七天乐——第七天
  • 原文地址:https://www.cnblogs.com/stealth7/p/6050357.html
Copyright © 2011-2022 走看看