gpt4 book ai didi

asp.net-mvc - 第三个文件夹后,mvc 5错误处理不起作用

转载 作者:行者123 更新时间:2023-12-03 07:41:58 24 4
gpt4 key购买 nike

我有一个MVC 5应用,并且在web.config中定义了自定义错误:

<customErrors mode="RemoteOnly" redirectMode="ResponseRedirect" defaultRedirect="~/Errors/GeneralError">
<error statusCode="404" redirect="~/Errors/NotFound" />
<error statusCode="500" redirect="~/Errors/ServerError" />
</customErrors>

如果我键入不存在的url,只要它最多3个级别/文件夹,它将可以很好地处理它。我还安装了Elmah,它将记录错误。另一方面,如果我尝试使用4个或更多级别/文件夹访问不存在的url,则不会处理该错误。它不会重定向到自定义错误页面或默认错误页面。相反,它将返回带有404 header 的空白页。含义:
  • website.com/blahblah
  • website.com/a/blahblah
  • website.com/a/b/blahblah

  • 将被处理,但是 website.com/a/b/c/blahblah及更高版本不会。另外,我有一些页面包含4个或更多文件夹,它们工作正常。在本地生产计算机和Azure上的已发布站点上会发生此问题。有人对为什么有见解吗?



    感谢@Nicholas Patton的链接,我做了这些修改:

    (1)我完全删除了customErrors

    (2)将此添加到 web.config中:
    <system.webServer>
    <httpErrors errorMode="Custom" existingResponse="Replace">
    <remove statusCode="404"/>
    <error statusCode="404" path="/Errors/NotFound" responseMode="ExecuteURL" />
    <remove statusCode="403"/>
    <error statusCode="403" path="/Errors/NotFound" responseMode="ExecuteURL" />
    <remove statusCode="500"/>
    <error statusCode="500" path="/Errors/ServerError" responseMode="ExecuteURL" />
    </httpErrors>

    (3)与文章中使用 .aspx文件的建议相反,我在MVC中使用了常规操作。例如,在 Controller Error中,我使用了 NotFound操作,如下所示:
    [Route("Errors/NotFound")]
    public ActionResult NotFound()
    {
    Response.StatusCode = 404;
    return View("Error404");
    }

    现在有一些区别。 404页面将不会重定向到 Error/NotFound?aspxerrorpath=/errorURL/a/b/c,它将仅在原始链接中显示自定义错误页面,而无需重定向。如果仍然需要 aspxerrorpath值,则可以在操作中简单地获取URL,如下所示:
    [Route("Errors/NotFound")]
    public ActionResult NotFound()
    {
    string aspxerrorpath = Request.RawUrl;
    // do whatever with aspxerrorpath

    Response.StatusCode = 404;
    return View("Error404");
    }

    尽管如此,Elmah仍然没有在3个文件夹以上记录404错误。但这是一个新问题的不同问题。

    最佳答案

    读这个:
    https://dusted.codes/demystifying-aspnet-mvc-5-error-pages-and-error-logging

    从上面的链接:

    ...what if someone navigates to a URL which isn't handled by ASP.NET? For example try navigating to http://{your-website}/a/b/c/d/e/f/g. The route is not mapped to ASP.NET and therefore the Application_Error event will not be raised.



    如果您确实希望自定义错误页面更加强大,那么这是一个很棒的教程。 :)

    关于asp.net-mvc - 第三个文件夹后,mvc 5错误处理不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37423379/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com