@ Url.action()的ASP.NET MVC帖子

Zap*_*ica 5 asp.net asp.net-mvc html-helper

我有asp.net自动生成的以下控制器

    //
    // POST: /Account/LogOff
    [HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult LogOff()
    {
        AuthenticationManager.SignOut();
        return RedirectToAction("Index", "Home");
    }
Run Code Online (Sandbox Code Playgroud)

现在我有一个注销按钮.目前它看起来像这样:

   <div class="userdrop">
                <ul>
                    <li><a href="@Url.Action("Manage", "Account")">Profile</a></li>                       
                    <li><a href="@Url.Action("LogOff", "Account")">Logout</a></li>
                </ul>
            </div><!--userdrop-->
Run Code Online (Sandbox Code Playgroud)

但它不起作用,我猜它是因为它是一个Post动作方法.

我怎么去"退出"?

[编辑]

为什么它会自动生成为Http Post?这样更安全吗?它在注销时是否不随身携带cookie?

Dar*_*rov 9

我怎么去"退出"?

通过使用表单而不是锚点:

<li>
    @using (Html.BeginForm("LogOff", "Account"))
    {
        @Html.AntiForgeryToken()
        <button type="submit">Logout</button>
    }
</li>
Run Code Online (Sandbox Code Playgroud)

如果你愿意的话,你可以调用CSS向导来设置这个按钮的样式.但在这种情况下,语义上正确的元素是一个html表单,它允许您发送POST动词.


Mik*_*oud 7

这没有令人信服的理由HttpPost.我知道它是以这种方式生成的,但你实际上并没有POST任何数据.只需删除该属性,它就会按原样运行.

现在,如果你想让它与它一起使用HttpPost那么你需要将它包装成Form一个submit按钮 submit表格onclick.

<li>
    @using (Html.BeginForm("LogOff", "Account",
        FormMethod.Post, new { id = "LogOffForm" }))
    {
        @Html.AntiForgeryToken()
        <a href="@Url.Action("LogOff", "Account")"
            onclick="$('#LogOffForm').submit();">Logout</a>
    }
</li>
Run Code Online (Sandbox Code Playgroud)