2010-01-26 96 views
5

ASP.NET MVC 應用ASP.NET MVC:奇怪POST行爲

我有我的控制器(的Toons)在兩個動作:

  1. [GET]列出
  2. [POST]添加

應用程序在IIS7集成模式下運行,所以/ Toons/List可以正常工作。但是當我執行POST(重定向到/ Toons/List內部)時,它將重定向(使用302對象移動)回到/ Toons/Add。

的問題消失,如果我使用的.aspx黑客(在IIS6/IIS7經典模式下工作)。

但是,如果沒有的.aspx - 獲取做工精細,但POST重定向我拉到本身,而是用GET。

我錯過了什麼?

我與webhost4life.com託管和他們沒有改變對IIS7集成模式了。

編輯:代碼按照預期使用UltiDev卡西尼服務器。

編輯:原來是尾隨斜槓在-URL問題。不知何故,如果最後沒有斜線,IIS7不會正確路由請求。

EDET:行爲
會發生什麼情況的解釋是,當我請求(POST)/Toons/List(沒有斜線),IIS沒有找到處理程序(我沒有知識,瞭解IIS究竟怎樣網址處理器映射),並將請求(使用302代碼)重定向到/Toons/List/(通知後面的斜線)。

瀏覽器,根據HTTP規範,必須重定向使用相同的方法請求(POST在這種情況下),而是它處理302,就好像它是303和問題獲取新URL請求。

這是不正確的,但大多數瀏覽器已知的行爲。

的解決方法是,使用的.aspx,破解,使其明確了IIS如何請求映射到ASP.NET處理程序,或配置IIS來處理使用ASP.NET處理程序中的虛擬目錄的一切。

問:什麼是更好的方式來處理呢?

+0

什麼是你的添加操作的代碼? – 2010-01-26 02:05:31

+0

return RedirectToAction(「List」,「Toons」); – 2010-01-26 02:10:11

+0

如果您執行List操作的[GET],會發生什麼情況? – 37Stars 2010-02-10 21:58:08

回答

1

你可以控制你的代碼。 將所有發佈帖子的頁面更改爲不帶結尾斜槓的帖子到正確的頁面。 如果它的第三方客戶端比返回異常,他們應該修復這個錯誤。

這是預期的行爲,而不是您的工作來恢復可能發生的一切。 但你應該給予很好的提示(例如異常消息,而不是一個奇怪的錯誤或重定向。)

+0

是的,我可以這樣解決。我使用ASP.NET MVC的路由,我試圖避免黑客入侵MVC的路由添加尾隨斜槓到URL。使用UltiDev並不像IIS 7那樣(即使用UltiDev,我的代碼完全按照我的要求工作)。 – 2010-07-09 14:24:29