1

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

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

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

点击链接到 Contact?target=main 我们去

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

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

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

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

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

4

1 回答 1

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 } };
    }
}

希望能有所帮助!

于 2013-01-24T21:38:43.900 回答