【问题标题】:HTTP Error 404.0 - Not Found in MVC 5HTTP 错误 404.0 - 在 MVC 5 中找不到
【发布时间】:2015-01-16 21:31:31
【问题描述】:

我在 MVC 5 中的项目。我想处理 404。我做到了,但问题是

当我使用以下 URL 访问视图时,一切正常且符合预期:

http://localhost/Hotels/Index30701000000

但是当我使用以下 URL 访问视图时,我收到 404.0 错误消息(错误如下所示)

http://localhost/Hotels/Edit/09099999dfdfb                       
http://localhost/Hotels/Edit/090/20130701000000

错误:HTTP 错误 404.0 - 未找到您要查找的资源已被删除、名称已更改或暂时不可用。

我的代码是

控制器

public class ErrorController : Controller
{
    // GET: Error
    public ActionResult Unauthorized()
    {
        Response.StatusCode = 404;
        Response.TrySkipIisCustomErrors = true;
        return View();
    }
}

路由配置

    routes.MapRoute(
        name: "Unauthorized",
        url: "Unauthorized/{action}/{id}",
        defaults: new
        {
            controller = "Error",
            action = "Unauthorized",
            id = UrlParameter.Optional
        }
    );

Global.asax

    protected void Application_Error()
    {
        Exception exception = Server.GetLastError();
        HttpException httpException = exception as HttpException;
    }

网络配置

  <system.web>
    <customErrors mode="On" defaultRedirect="Error">
      <error statusCode="404" redirect="Unauthorized" />
    </customErrors>
  </system.web>

查看 //Unauthorized.cshtml

@model System.Web.Mvc.HandleErrorInfo
@{
    ViewBag.Title = "Unauthorized";
}
<h1>Page Not Found!</h1>

Reference Link

【问题讨论】:

  • 我不知道如何在 C# 中执行此操作,但是您为什么不编辑您的服务器设置,以便将每个 404 重定向到您的自定义页面?
  • 我不知道该怎么做,

标签: c# asp.net asp.net-mvc-5 http-status-code-404 custom-error-pages


【解决方案1】:

只需将这些代码行写入应用程序的 global.asax 文件即可。

protected void Application_EndRequest()
    {
        if (Context.Response.StatusCode == 404)
        {
            if ((!Request.RawUrl.Contains("style")) && (!Request.RawUrl.Contains("images")))
            {
                Response.Clear();
                if (Response.StatusCode == 404)
                {
                    Response.Redirect("/ControllerName/ActionName");
                }
            }
        }
    }

【讨论】:

    【解决方案2】:

    另一种方法是在 ErrorController 中定义错误页面,然后在 web.config 中的 system.WebServer 下使用 httpError 部分。

    <httpErrors errorMode="Custom" existingResponse="Replace">
      <remove statusCode="404" />
      <error statusCode="404" responseMode="ExecuteURL" path="/Error/NotFound" />
      <remove statusCode="500" />
      <error statusCode="500" responseMode="ExecuteURL" path="/Error/Error" />
    </httpErrors>
    

    上面的代码让您可以测试您的自定义页面。但是在您的开发环境中,您可以将 Custom 替换为 errorMode="DetailedLocalOnly" 和 existingResponse="Auto",这样您仍然可以看到详细错误。

    我最近写了一篇关于它的文章,它附带了一个示例演示项目,可以在 GitHub 上使用。 http://www.neptunecentury.com/Blogs/ASP-NET/MVC5/MVC-5-How-To-Show-Custom-Error-Pages

    【讨论】:

      猜你喜欢
      • 2013-12-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-18
      • 1970-01-01
      • 2014-06-16
      • 1970-01-01
      相关资源
      最近更新 更多