MVC AuthController中的HttpPost

时间:2014-02-05 00:41:08

标签: c# .net asp.net-mvc authentication

我正在尝试设置一次性链接身份验证方法。我的Auth / Index中有一个初始表单,用户输入他们的用户名和密码。这会生成一个UID并将其传递给另一个视图

@model Hsbc.Marketing_Awards.Website.Models.AuthModel

<h2>EnterAuthenticationLink</h2>

@using(Html.BeginForm("AuthorizeOneTimeLink", "Auth", FormMethod.Post))
{
    @Html.LabelFor(m => m.EmailAddress, "Enter one time link")
    @Html.TextBoxFor(m => m.AuthenticationUrl, new { Name = "authenticationUrl" })
    <input type="submit" value="Submit"/>
} 

我想提交此表单,但不断重定向到我的Auth / Index视图。我假设这是因为我需要在我的web.config中授权视图,但我已经尝试过这样做,但它似乎不起作用。

    <system.web>
    <httpCookies httpOnlyCookies="true"/>
    <authentication mode="Forms">
      <forms loginUrl="Auth" timeout="30" slidingExpiration="true" defaultUrl="Home/Index"/>
    </authentication>
    </system.web>
  <location path="Views/Auth/EnterAuthenticationLink.cshtml">
    <system.web>
      <authorization>
        <allow users="*" />
      </authorization>
    </system.web>
  </location>
  <location path="Views/Auth">
    <system.web>
      <authorization>
        <allow users="*" />
      </authorization>
    </system.web>
  </location>

我正试图访问的方法是

[HttpPost]
public ActionResult AuthorizeOneTimeLink(string authenticationUrl)
{
// Authorise link
}

如果我将“AuthorizeOneTimeLink”操作名称更改为Index(因此控制器上有2个Index操作),请将FormMethod更改为FormMethod.Get(并将我的新索引操作中的属性更改为[HttpGet])然后有效,但不会通过渗透测试。

1 个答案:

答案 0 :(得分:0)

我现在明白了这个问题。它必须是HttpGet(并将通过测试),因为它是发送给用户的一次性链接。用户必须单击链接将参数传递给应用程序。这必须使用HttpGet而不是HttpPost来完成。