【问题标题】:404 implementation in MVC RazorMVC Razor 中的 404 实现
【发布时间】:2015-09-08 15:34:48
【问题描述】:

我正在使用 ASP.NET MVC 4.5.1 razor C#

我的 Web.config 配置有以下标签之一。

<customErrors mode="On" defaultRedirect="Error">
  <error statusCode="404" redirect="/Error.htm"/>
</customErrors>

我有一个类可以捕获所有异常,如下所示。

public class Error : HandleErrorAttribute
{
    public override void OnException(ExceptionContext filterContext)
    {
        base.OnException(filterContext);
    }
}

我的基本控制器如下所示。

[Error]
public class BaseController : AsyncController
{

}

我的控制器动作方法如下所示

[HttpGet, Route("All-User"), LoginAuthentication, AdminAuthorization]
public async Task<ActionResult> AllUsers()
{
    var list = await _user.List();
    return View(list);
}

我的网址如下所示,并且完美运行

本地主机/所有用户

当我在 url 下面执行时,我得到 404,但没有执行 Error 类的 catch 块。

localhost/All-Userabc

我错过了什么吗?

我也尝试过Install-Package NotFoundMvc,但这不起作用并出现异常“无效操作异常”

【问题讨论】:

  • 您可以在 web.config 中设置 url 在发生 404 时重定向以代替 erro.htm
  • @EhsanSajjad:感谢您的回复。我已经试过了。你能把缺少的步骤给我吗?
  • 您的控制器没有抛出异常,那么您为什么希望您的异常过滤器启动?
  • @BenRobinson:控制器和它们的动作方法都没有触发。最后我得到了 404。

标签: c# asp.net-mvc-3 asp.net-mvc-4 c#-4.0


【解决方案1】:

您的 Error 类不会被此 url 调用,因为它继承了 HandleErrorAttribute,它仅在操作方法引发异常时调用。在您的情况下,由于您的 URL 不匹配任何路由,因此不会执行任何操作方法。

如果您希望代码针对 404 错误执行,请尝试使用此问题中的默认路由示例 - ASP.NET MVC - Catch All Route And Default Route

【讨论】:

  • 嗨。我刚刚检查了解决方案。它不适用于服务器,但仅适用于开发环境。但不在 IIS 上,也不在服务器上。
  • 无论网络服务器和操作系统如何,都应该可以正常工作。但是不看代码很难说你有什么问题。
猜你喜欢
  • 1970-01-01
  • 2021-08-16
  • 2016-09-28
  • 2022-10-24
  • 1970-01-01
  • 2016-02-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多