我在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
重写路径会在有回发时导致无效的视图状态
答案 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");
}
}
新代码:
void Application_Start(object sender, EventArgs e)
{
RegisterRoutes(RouteTable.Routes);
}
void RegisterRoutes(RouteCollection routes)
{
routes.MapPageRoute("test",
"thisisawesome",
"~/Products.aspx?catg=14&cat=161");
}