2010-12-17 86 views
0

我在查询字符串参数被添加到登录重定向url的生产应用程序中有此问题。为了重现这一点,创建一个新的MVC项目(我用MVC2和MVC3 R2进行了测试)。在HomeController添加了以下行动:ASP.NET MVC UnauthorizedResult添加不需要的参数登录url

public ActionResult Break() 
{ 
    return new HttpUnauthorizedResult(); 
} 

启动应用程序和命中/home/break?a=1&b=2。因此,这自然应该重定向到/Account/LogOn?ReturnUrl=/home/break%3fa%3d1%26b%3d2但它实际上将所请求的参数(&a=1&b=2)到URL的末尾还有:

alt text

这究竟是为什么?由于ReturnUrl中的编码url具有所需的参数,因此不需要添加这些参数。我认为这将是生产应用程序中的东西,但如果遵循上述步骤,则默认的MVC应用程序也会重现此操作。任何想法如何解决这个赞赏。

回答

1

这样做是为了让LogOn操作可以访问原始(未编码)的查询字符串值。

所以给出的URI

http://localhost:65183/Account/LogOn?ReturnUrl=/home/break%3fa%3d1%26b%3d2&a=1&b=2

的RETURNURL键/值对是URI重定向到登录成功之后,并且它包含从先前的请求的编码的查询字符串对。

要改变这种行为,你需要重写重定向是如何构建的。

protected void Application_EndRequest(object sender, EventArgs e) 
{ 
    if (Response.RedirectLocation != null && Response.RedirectLocation.Contains("ReturnUrl")) 
    { 
     // change redirect URI 
    } 
} 
+0

谢谢。现在我觉得这很有道理,最初它让我非常好奇。因为它是有设计的,所以我会留下这个。 – TheCloudlessSky 2010-12-17 01:29:29