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

  • 相关阅读:
    SQL Server 2008的备份和日志收缩
    Java邮件开发JavaMail(三)
    数据库连接字符串大全
    什么是 MDAC、 DA SDK、 ODBC、 OLEDB、 ADO、 RDS, 和 ADO / MD
    数据库连接字符串大全
    数据库连接字符串大全
    ConnectionString类 简体中文版
    数据库连接字符串大全
    ConnectionString类 简体中文版
    ConnectionString类 简体中文版
  • 原文地址:https://www.cnblogs.com/stealth7/p/6050357.html
Copyright © 2020-2023  润新知