代码之家  ›  专栏  ›  技术社区  ›  Gary

显示404.7的自定义错误页。UseStatusCodePages()不工作

  •  1
  • Gary  · 技术社区  · 7 年前

    我想在我的ASP Core 2.0 MVC应用程序中显示错误的自定义页面。但我只能对某些错误类型实现这一点。

    默认情况下,404错误如下所示:

    404 error

    我相信在ASP Core 2.0应用程序中捕捉和自定义404(未找到)等错误的正确方法是使用app。在启动时使用Configure()中的StatusCodePages()中间件。反恐精英。我已经这样做了,或者更具体地说,我使用了这个应用程序。使用StatusCodePageSwithreexecute(),因为我想创建自己的错误页面。

    app.UseStatusCodePagesWithReExecute("/Error/Index", "?statusCode={0}");
    

    现在,当我浏览到一个不存在的资源时,我会看到我的自定义错误消息,因为代码成功地拦截了404错误:

    Customized 404 error

    好的,看来这是可行的。

    然而,我尝试导航到 https://localhost:44300/Startup.cs

    这给了我一个404.7错误,大概是因为不应该允许用户导航到此文件。但更重要的是, 这次我没有看到自定义错误页 .相反,我看到的页面看起来像是由服务器生成的。

    404.7 error

    我有几个与此相关的问题:

    1. 为什么会这样?当我使用应用程序时。UseStatusCodePages(),为什么中间件不能像404错误一样捕获404.7错误?

    2. 此错误是在哪里生成的?我感觉这是由IIS服务器设置生成的,因为错误本身说我应该在applicationhost中验证设置。配置或网络。配置。

    但是(i)没有网络。在ASP Core 2.0应用程序中配置,因此我看不到这些设置可能来自何处,并且(ii)我相信ASP Core 2.0使用的是Kestral,而不是IIS,我在我的应用程序中也看不到任何Kestral设置。

    1. 我该怎么做才能用我自己定制的错误页面替换这个错误页面,就像我对404错误所做的一样?
    1 回复  |  直到 7 年前
        1
  •  0
  •   Nish26    7 年前

    RequestFiltering 是IIS的一种安全功能,它阻止您的请求并显示该消息。当您尝试调试asp时。net核心应用程序,kestrel使用IIS自动使用。如果想绕过IIS,直接将kestrel用作独立服务器,可以在visual studio中单击向下箭头按钮 enter image description here 在IIS Express旁边,从下拉列表中选择项目名称。如果您现在调试,它将打开一个控制台窗口,该窗口是作为独立应用程序运行的kestrel服务器。

    Kestrel不是一个功能齐全的web服务器,在生产环境中,您通常会将其与其他服务器(如IIS或Nginx)一起运行,后者将充当反向代理服务器。