我在_Layout.cshtml文件中有以下内容:
<a href="@Url.Action("LogOff", "Account")"><span class="fa fa-files-o"></span> <span class="xn-text">NEW Log Out</span></a>
但是,当我点击链接时,我收到“无法找到资源”错误消息。
描述:HTTP 404.您正在查找的资源(或其中一个依赖项)可能已被删除,名称已更改或暂时不可用。请查看以下网址,确保拼写正确。
请求的网址:/帐户/登录
帐户控制器尚未编辑或移动,与默认MVC 5模板的状态相同。
呈现的HTML是:
<a href="/Account/LogOff"><span class="fa fa-files-o"></span> <span class="xn-text">NEW Log Out</span></a>
编辑:我可以从不使用_layout屏幕的屏幕登录,因此可以在应用程序的其他部分找到帐户控制器。登录然后转到主页/索引操作并返回带有布局的索引视图。
此外,帐户控制器尚未以任何方式进行编辑,所有方法,声明,所有内容都不会保留原始默认模板。控制器位于代码的另一部分,因为登录功能正常工作。
答案 0 :(得分:1)
您需要Controller
名为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
}
}
答案 1 :(得分:1)
根据您的评论:
哦,你至少需要一个[HttpPost]。加上一些实际注销的代码,而不仅仅是重定向到主页也可能有用
您的问题听起来像是服务器逻辑中的代码注释了[HttpPost]
,如果是,那么您的HREF正在寻找显然不存在的GET
Action / ViewResult。
您可以通过以下三种方式之一解决此问题。从服务器逻辑中删除[HttpPost]
它应该有效(绝对不是最佳做法),或者您可以重新调整视图以执行以下操作之一:
解决方案一 - 最初查看互联网应用模板的方式
@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>
解决方案二 - 与上述方法略有不同
@using (Html.BeginForm("LogOff", "Account", FormMethod.Post, null}))
{
@Html.AntiForgeryToken()
<button type="submit">
<span class="fa fa-files-o"></span> <span class="xn-text">NEW Log Out</span>
</button>
}
在LogOff操作中,您只需执行以下操作:
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult LogOff()
{
WebUserSecurity.Logout();
Session.Abandon();
return RedirectToAction("Login", "Account");
}