2014-11-03 58 views
1

我試圖爲我的MVC 5項目創建一個登錄表單。我已經有驗證工作,所以我的控制器裝有[Authorize]。當我啓動我的項目,我正確地引導到我的匿名登錄操作:MVC 5表單不會發布到[AllowAnonymous]方法

[HttpGet] 
[AllowAnonymous] 
public ActionResult Login() 
{ 
    return View(); 
} 

我已經安裝在該視圖中我的帖子的形式。生成的HTML看起來很好。

我再補充一點,應該接受表單提交的新方法:

[HttpPost] 
[AllowAnonymous] 
public ActionResult Login(FormCollection formCollection) 
{ 
    ... 

我發現,當我提交表單,我的第一個Login方法被調用 - 顯然引起了一些身份驗證問題重定向。 (提琴手跟蹤顯示我的表單被POST發送到/ Login?key = myKeyHere,而不是作爲表單條目發送到/ Login with key = myKeyHere此外,如果我更改了我的身份驗證的重定向URL從/登錄到/ SomethingElse,表單提交讓我重定向到/ SomethingElse,而不是將其發佈到/登錄。)

如果我從我的控制器中刪除[Authorize],我的表單提交就會很好。

它似乎沒有問題,我的兩個方法是相同的名稱(Login),因爲我可以重命名接受POST的方法,更改我的表單的操作,並提交到,我被重定向再次到我的GET登錄頁面。

如何將表單發佈到[AllowAnonymous]方法需要做些什麼?

更新,包括我查看 我的觀點已經使用了POST操作:

@using (Html.BeginForm("Login", "Home", FormMethod.Post)) 
{ 
    @Html.TextBox("key", string.Empty, new { @class = "input_centered", id = "key_text"}) 
    <input type="submit" id="key_submit" class="enter" name="submit" value="Enter" /> 
} 

生成的HTML看起來不錯:

<form action="/Login" method="post"> 
<input class="input_centered" id="key_text" name="key" type="text" value="" /> 
<input type="submit" id="key_enter" class="enter" name="submit" value="Enter" /> 
+0

如果您創建一個新的MVC應用程序,該模板將創建一個登錄POST操作,就像您試圖實現的一樣。也許透過這些可以幫助你。你能否顯示你的表格被提交? – Jonesopolis 2014-11-03 23:45:26

回答

0

您登錄表單只是收集數據,以便你被授權。當您發佈表單時,它轉到POST方法(使用[Authorize]屬性),發現您尚未獲得授權(在此階段沒有實際調用方法來授權您),並立即將您重定向回登錄頁面,從而創建無盡的循環。

您的POST方法需要[AllowAnonymous]屬性,然後在該方法中執行授權邏輯。從現在開始,您可以訪問其他標有[Authorize]的操作方法。

+0

我的第二個方法('公衆的ActionResult登錄(FormCollection formCollection)')_is_設置爲'[AllowAnonymous]'。也許它不是以某種方式註冊? – user655321 2014-11-04 00:23:05

+0

我只是將你的代碼複製到一個新的項目中,並且工作正常(命中POST方法)。 – 2014-11-04 00:41:04

+0

Stephen:你是否用'[Authorize]'限制了控制器級訪問? – user655321 2014-11-04 20:02:48

0

問題是您正在使用FormCollection對象,它太寬泛,MVC引擎無法構建或映射(反序列化)您發佈的數據到FormCollection對象,因此無法找到任何匹配的操作。嘗試將您的FormCollection轉換爲可序列化的對象。

例如。

[HttpPost] 
[AllowAnonymous] 
[ValidateAntiForgeryToken] 
public ActionResult Login(LoginViewModel model) 
+0

當我刪除'[Authorize]'屬性時,我的代碼可以正常工作。爲什麼這會成爲複雜性問題? – user655321 2014-11-04 00:21:34

+0

I之前有類似的問題,所以我建議。 – Sanj 2014-11-04 02:59:31