2010-12-17 75 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