2014-11-03 61 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