Razor MVC-URL.Action给出了“未找到资源”错误

Razor MVC-URL.Action给出了“未找到资源”错误,razor,asp.net-mvc-5,Razor,Asp.net Mvc 5,在我的_Layout.cshtml文件中有以下内容: <a href="@Url.Action("LogOff", "Account")"><span class="fa fa-files-o"></span> <span class="xn-text">NEW Log Out</span></a> 但是,当我单击链接时,会收到“找不到资源”错误消息 描述:HTTP404。您正在查找的资源(或其依赖项之一)可能已被删除

在我的_Layout.cshtml文件中有以下内容:

<a href="@Url.Action("LogOff", "Account")"><span class="fa fa-files-o"></span> <span class="xn-text">NEW Log Out</span></a>

但是,当我单击链接时,会收到“找不到资源”错误消息

描述:HTTP404。您正在查找的资源(或其依赖项之一)可能已被删除、名称已更改或暂时不可用。请检查以下URL并确保其拼写正确

请求的URL:/帐户/注销

帐户控制器尚未编辑或移动,状态与默认MVC 5模板相同

呈现的HTML是:

<a href="/Account/LogOff"><span class="fa fa-files-o"></span> <span class="xn-text">NEW Log Out</span></a>

编辑:我可以从不使用_布局屏幕的屏幕登录,因此可以在应用程序的其他部分找到帐户控制器。然后,登录进入Home/Index操作并返回带有布局的索引视图


此外,帐户控制器还没有以任何方式进行编辑,所有方法、声明和所有内容都保持原始默认模板不变。登录功能工作时,在代码的另一部分中可以找到控制器。

您需要一个名为
AccountController
控制器和一个名为
LogOff
的方法才能工作

结构应该是这样的:

[Authorize]
public class AccountController : Controller
{
    public AccountController()
    {
    }

    public ActionResult LogOff()
    {
        // logout code here
        return RedirectToAction("Index", "Home"); // this you can change in whatever you like
    }
}

您需要一个名为
AccountController
Controller
和一个名为
LogOff
的方法才能工作

结构应该是这样的:

[Authorize]
public class AccountController : Controller
{
    public AccountController()
    {
    }

    public ActionResult LogOff()
    {
        // logout code here
        return RedirectToAction("Index", "Home"); // this you can change in whatever you like
    }
}

您需要一个名为
AccountController
Controller
和一个名为
LogOff
的方法才能工作

结构应该是这样的:

[Authorize]
public class AccountController : Controller
{
    public AccountController()
    {
    }

    public ActionResult LogOff()
    {
        // logout code here
        return RedirectToAction("Index", "Home"); // this you can change in whatever you like
    }
}

您需要一个名为
AccountController
Controller
和一个名为
LogOff
的方法才能工作

结构应该是这样的:

[Authorize]
public class AccountController : Controller
{
    public AccountController()
    {
    }

    public ActionResult LogOff()
    {
        // logout code here
        return RedirectToAction("Index", "Home"); // this you can change in whatever you like
    }
}
根据您的评论:

哦,至少在这方面你需要一个[HttpPost]。加上一些实际注销的代码,而不仅仅是重定向到主页可能也很有用

您的问题听起来像是服务器逻辑中的代码被注释为
[HttpPost]
,如果是,则您的HREF正在寻找一个显然不存在的
GET
Action/ViewResult

您可以通过以下三种方式之一解决此问题。从服务器逻辑中删除
[HttpPost]
,它应该可以工作(绝对不是最佳做法),或者您可以重新调整视图以执行以下操作之一:

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult LogOff()
{
    WebUserSecurity.Logout();
    Session.Abandon();

    return RedirectToAction("Login", "Account");
}
解决方案一-Internet应用程序模板最初的外观

@using (Html.BeginForm("LogOff", "Account", FormMethod.Post, new { 
            @class = "no-margin", id = "logoutForm"}))
{
    @Html.AntiForgeryToken()
}

<a href="javascript:document.getElementById('logoutForm').submit()">
    <span class="fa fa-files-o"></span> <span class="xn-text">NEW Log Out</span>
</a>
根据您的评论:

哦,至少在这方面你需要一个[HttpPost]。加上一些实际注销的代码,而不仅仅是重定向到主页可能也很有用

您的问题听起来像是服务器逻辑中的代码被注释为
[HttpPost]
,如果是,则您的HREF正在寻找一个显然不存在的
GET
Action/ViewResult

您可以通过以下三种方式之一解决此问题。从服务器逻辑中删除
[HttpPost]
,它应该可以工作(绝对不是最佳做法),或者您可以重新调整视图以执行以下操作之一:

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult LogOff()
{
    WebUserSecurity.Logout();
    Session.Abandon();

    return RedirectToAction("Login", "Account");
}
解决方案一-Internet应用程序模板最初的外观

@using (Html.BeginForm("LogOff", "Account", FormMethod.Post, new { 
            @class = "no-margin", id = "logoutForm"}))
{
    @Html.AntiForgeryToken()
}

<a href="javascript:document.getElementById('logoutForm').submit()">
    <span class="fa fa-files-o"></span> <span class="xn-text">NEW Log Out</span>
</a>
根据您的评论:

哦,至少在这方面你需要一个[HttpPost]。加上一些实际注销的代码,而不仅仅是重定向到主页可能也很有用

您的问题听起来像是服务器逻辑中的代码被注释为
[HttpPost]
,如果是,则您的HREF正在寻找一个显然不存在的
GET
Action/ViewResult

您可以通过以下三种方式之一解决此问题。从服务器逻辑中删除
[HttpPost]
,它应该可以工作(绝对不是最佳做法),或者您可以重新调整视图以执行以下操作之一:

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult LogOff()
{
    WebUserSecurity.Logout();
    Session.Abandon();

    return RedirectToAction("Login", "Account");
}
解决方案一-Internet应用程序模板最初的外观

@using (Html.BeginForm("LogOff", "Account", FormMethod.Post, new { 
            @class = "no-margin", id = "logoutForm"}))
{
    @Html.AntiForgeryToken()
}

<a href="javascript:document.getElementById('logoutForm').submit()">
    <span class="fa fa-files-o"></span> <span class="xn-text">NEW Log Out</span>
</a>
根据您的评论:

哦,至少在这方面你需要一个[HttpPost]。加上一些实际注销的代码,而不仅仅是重定向到主页可能也很有用

您的问题听起来像是服务器逻辑中的代码被注释为
[HttpPost]
,如果是,则您的HREF正在寻找一个显然不存在的
GET
Action/ViewResult

您可以通过以下三种方式之一解决此问题。从服务器逻辑中删除
[HttpPost]
,它应该可以工作(绝对不是最佳做法),或者您可以重新调整视图以执行以下操作之一:

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult LogOff()
{
    WebUserSecurity.Logout();
    Session.Abandon();

    return RedirectToAction("Login", "Account");
}
解决方案一-Internet应用程序模板最初的外观

@using (Html.BeginForm("LogOff", "Account", FormMethod.Post, new { 
            @class = "no-margin", id = "logoutForm"}))
{
    @Html.AntiForgeryToken()
}

<a href="javascript:document.getElementById('logoutForm').submit()">
    <span class="fa fa-files-o"></span> <span class="xn-text">NEW Log Out</span>
</a>


注销方法是否具有ChildAction属性?它没有。我添加了一个,但仍然得到相同的资源未找到错误。否。这是带有主/索引的_布局。顶部显示的地址是“检查您的帐户管理员”。是否有任何名为LogOff的操作您需要一个名为
AccountController
控制器和一个名为
LogOff
的方法才能工作注销方法是否具有ChildAction属性?它没有。我添加了一个,但仍然得到相同的资源未找到错误。否。这是带有主/索引的_布局。顶部显示的地址是“检查您的帐户管理员”。是否有任何名为LogOff的操作您需要一个名为
AccountController
控制器和一个名为
LogOff
的方法才能工作注销方法是否具有ChildAction属性?它没有。我添加了一个,但仍然得到相同的资源未找到错误。否。这是带有主/索引的_布局。顶部显示的地址是“检查您的帐户管理员”。是否有任何名为注销的操作您需要一个名为
AccountController
Controller
控制器和一个名为
LogOff
的方法才能执行此操作