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

  • 相关阅读:
    python3.5: error while loading shared libraries: libpython3.5m.so.1.0: cannot open shared object file: No such file or directory
    php回溯
    PHPredis长连接pconnect
    php操作redis出现不报错就退出
    MSMQ消息队列
    消息队列使用的四种场景介绍(准载)
    Spring MVC参数封装传递
    Spring MVC配置实例
    .NET项目中使用PostSharp
    C#进阶系列——AOP
  • 原文地址:https://www.cnblogs.com/stealth7/p/6050357.html
Copyright © 2011-2022 走看看