ASP WebForms路由

时间:2012-06-14 15:10:00

标签: asp.net .net routes

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

但我实际上要做的是将正确定义的路线之后的所有页面路由为正常

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

点击指向联系人的链接?target = main us转到

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 FORMS而不是MVC

1 个答案:

答案 0 :(得分: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 } };
    }
}
希望能有所帮助!