【问题标题】:MVC - URL.Action gives Resource not found errorMVC - URL.Action 给出 Resource not found 错误
【发布时间】:2014-12-01 17:14:16
【问题描述】:

我的 _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。您要查找的资源(或其依赖项之一)可能已被删除、名称已更改或暂时不可用。请查看以下 URL 并确保其拼写正确。

请求的 URL:/Account/LogOff

Account 控制器未被编辑或移动,状态与默认 MVC 5 模板相同。

呈现的 HTML 是:

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

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

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

【问题讨论】:

  • LogOff 方法是否有 ChildAction 属性?
  • 它没有。我添加了一个,但仍然得到相同的资源未找到错误。
  • 不。这是带有 Home/Index 的 _layout。顶部显示的地址是'localhost:4361'
  • 检查您的帐户控制器。是否有任何名为 LogOff 的操作
  • 您需要有一个名为 AccountControllerController 和一个名为 LogOff 的方法才能使其工作

标签: razor asp.net-mvc-5


【解决方案1】:

您需要有一个名为 AccountControllerController 和一个名为 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
    }
}

【讨论】:

  • 并且该方法不应有 [NonActionAttribute] 或 [ChildActionAttribute]。
  • 我以为我说过我没有编辑 AccountController。已编辑问题以使这一点更清楚。哦,你至少需要一个 [HttpPost]。加上一些实际注销的代码,而不仅仅是重定向到主页可能也很有用。
  • 方法里面的代码和你得到的错误有什么关系?
【解决方案2】:

根据您的评论:

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

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

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

解决方案一 - 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>

解决方案二 - 与上述解决方案略有不同的方法

@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>
}

在您的注销操作中,您只需执行以下操作:

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

    return RedirectToAction("Login", "Account");
}

【讨论】:

    猜你喜欢
    • 2016-08-30
    • 2018-09-11
    • 2019-05-12
    • 2021-12-18
    • 2013-03-10
    • 2015-06-07
    • 2020-04-12
    • 1970-01-01
    • 2011-11-30
    相关资源
    最近更新 更多