使用RewritePath时视图状态无效

时间:2010-10-04 12:00:16

标签: asp.net c#-4.0 url-rewriting viewstate

我在global.asax

中有这个
void Application_BeginRequest(object sender, EventArgs e) 
{
    string pathAndQuery = Request.Url.PathAndQuery.ToString().ToLower();
    if (pathAndQuery.Contains("prettyUrl"))
    {
        HttpContext.Current.RewritePath("Category.aspx?catg=uglyUrl");
    }
}

它工作正常,但我有时会得到 500无法验证数据 所以我猜这是因为校验和是代表网址生成的。与viewstate不匹配。

那么你如何解决它以便你可以使用RewritePath但不会得到500个错误?

编辑忘了提及我在web.config中有一个静态的机器密钥验证密钥

Edit2 发现其他人有完全相同的问题:http://bytes.com/topic/asp-net/answers/298680-form-action-context-rewritepath#post1172026

重写路径会在有回发时导致无效的视图状态

1 个答案:

答案 0 :(得分:1)

System.Web.Routing

切换到地图路由

旧代码:

void Application_BeginRequest(object sender, EventArgs e) 
{
    string pathAndQuery = Request.Url.PathAndQuery.ToString().ToLower();

    if (pathAndQuery.Contains("thisisawesome"))
    {
        HttpContext.Current.RewritePath("Products.aspx?catg=14&cat=161");
    }
}

新代码:

源: http://weblogs.asp.net/scottgu/archive/2009/10/13/url-routing-with-asp-net-4-web-forms-vs-2010-and-net-4-0-series.aspx

void Application_Start(object sender, EventArgs e) 
{
    RegisterRoutes(RouteTable.Routes);
}

void RegisterRoutes(RouteCollection routes)
{
    routes.MapPageRoute("test", 
                        "thisisawesome", 
                        "~/Products.aspx?catg=14&cat=161");
}