资源无法找到asp.net mvc

时间:2015-05-27 06:41:30

标签: c# asp.net asp.net-mvc http-post antiforgerytoken

我熟悉asp.net mvc,Identity并尝试简单注销但得到The resource cannot be found.

在我的html页面

<li><a href="@Url.Action("LogOff", "Account")" id="home">Log off</a></li>

,这是在AccountController

    [HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult LogOff()
    {
        AuthenticationManager.SignOut();
        return RedirectToAction("Index", "Home");
    }

这在我的路线配置文件中

 routes.MapRoute(
         null,
         "LogOff",
         new { controller = "Account", action = "LogOff" }

我能错过什么?

4 个答案:

答案 0 :(得分:3)

[HttpPost]方法

中删除LogOff
[ValidateAntiForgeryToken]
public ActionResult LogOff()
{
    AuthenticationManager.SignOut();
    return RedirectToAction("Index", "Home");
}

答案 1 :(得分:2)

简单地删除HttpPost

public ActionResult LogOff()
{
    AuthenticationManager.SignOut();
    return RedirectToAction("Index", "Home");
}

适合我

答案 2 :(得分:2)

使用post方法注销。请参阅以下示例。

   @using (Html.BeginForm("LogOff", "Account", FormMethod.Post, new { id = "logoutForm" })) {
            @Html.AntiForgeryToken()
            <a href="javascript:document.getElementById('logoutForm').submit()">Log off</a>
        }

答案 3 :(得分:2)

默认情况下,当您使用某些身份验证创建项目时,它会使用LogOff属性创建HttpPost方法。

所以你有两种方法来解决它

首先一个是删除此属性。让你的代码看起来像

[ValidateAntiForgeryToken]
public ActionResult LogOff()
{
    AuthenticationManager.SignOut();
    return RedirectToAction("Index", "Home");
}

第二一个是将html更改为使用POST方法docs here使用@Html.BeginForm

默认项目使用第二种类型的实现

修改 当我输入这个答案 Rad 时,给出一个示例如何使用BeginForm助手here it is