【问题标题】:ASP WebForms RoutingASP WebForms 路由
【发布时间】:2012-06-14 15:10:00
【问题描述】:

我已经在global.asax 中设置了一个路由,它可以正常工作到单个路由目的地。喜欢 home.aspx

但我实际上想要做的是在定义的路由之后正常路由所有页面

mysite.com/token/home.aspx?demo=yes

点击联系方式的链接?target=main us go to

mysite.com/token/contact.aspx?target=main

因为我总是想在所有页面上使用 {token},但我希望网站照常运行

目前,我单击联系人之类的链接,并且在 URL 栏中将 URL 填充为mysite.com/token/contact.aspx?target=main,但服务器说找不到资源;我假设在服务器级别它的路由到 /home.aspx/contact.aspx?target=main

是否有通配符或设置可以正常路由任何其他..或所有页面到实际请求的页面而不是静态路由 - 但仍然能够将令牌作为路由变量而不是参数访问查询?

为了澄清,这是 .NET4 上的 ASP WEB 表单,而不是 MVC

【问题讨论】:

    标签: asp.net .net routes


    【解决方案1】:

    您可以定义通配符路由并使用 BuildManager 返回正确的文件。

    例子:

    public class TokenRoute : Route 
    {
        class TokenRouteHandler : IRouteHandler
        {
            #region IRouteHandler Members
    
            public IHttpHandler GetHttpHandler(RequestContext requestContext)
            {
                var path = Convert.ToString(requestContext.RouteData.Values["path"]);
                if (string.IsNullOrEmpty(path))
                {
                    path = "Default.aspx";
                }
    
                var vPath = "~/" + path;
    
                HttpContext.Current.Items[RoutingUtil.UrlRoutingVirtualPathKey] = vPath;
    
                return (IHttpHandler)BuildManager.CreateInstanceFromVirtualPath(vPath, typeof(IHttpHandler));
            }
    
            #endregion
        }
    
        public TokenRoute(string token) 
               : base(token + "/{*path}", null, new RouteValueDictionary(), new TokenRouteHandler())
        {
            DataTokens = new RouteValueDictionary { { "token", token } };
        }
    }
    

    希望能帮到你!

    【讨论】:

    • 感谢您的回答。我将对此进行测试。我很久以前用另一种解决方案解决了这个问题,但很高兴知道。谢谢!
    猜你喜欢
    • 2015-10-12
    • 2011-08-08
    • 2016-01-06
    • 1970-01-01
    • 2010-11-06
    • 1970-01-01
    • 1970-01-01
    • 2012-03-19
    • 1970-01-01
    相关资源
    最近更新 更多