1
我們有一個MVC應用程序,它使用控制器用於AJAX端點,並使用FormsAuth進行身份驗證。GET與POST Ajax請求中的不同行爲
我遇到了一個有趣的場景,其中GET請求的行爲與POST請求不同(對於未經授權的用戶)。
在這種特殊情況下,我們的自定義的ControllerFactory運行下面的代碼試圖訪問該控制器:
FormsAuthentication.SignOut();
requestContext.HttpContext.Response.Redirect(FormsAuthentication.LoginUrl);
throw new UnauthorizedAccessException();
(我認識到,一個AJAX請求重定向裏面是沒有意義的,但包涵)。
當我對此控制器發出GET請求(AJAX)時,客戶端會收到401-未授權異常,我可以在客戶端捕獲並將用戶重定向到登錄頁面。
當我向這個控制器發送一個POST請求(AJAX)時,我得到一個302,並且我的請求被重定向到了我的登錄頁面。
爲什麼GET和POST請求的行爲不同?
你的控制器工廠試圖運行的代碼不是它的責任=>控制器工廠應該實例化控制器,而不是執行認證。你有'[Authorize]'屬性用於這個目的。 –
@Darin - 我意識到這一點,其實就在這個代碼之上的是一個評論,說這是一個黑客攻擊。 :D這個事實源於這樣的事實:如果用戶沒有登錄(由於我們的IoC容器是如何設置的),所以一些控制器不能被構造。然而,再一次,與這個問題沒有密切關係。 :D – Jonas
我只是提到了這裏的最佳實踐。事實上,你沒有遵循這些做法,遇到問題並不令我感到驚訝。所有人都這樣做:-)所以,擺脫黑客行爲,以正確的方式做事,並開心。如果你不確定你提供了一個完整的例子來重現你的問題。您在問題中發佈的3行代碼遠遠不夠。 –