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

时间:2018-05-16 17:57:08

标签: c# asp.net asp.net-core asp.net-core-2.0

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

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

404 error

我认为在ASP Core 2.0应用程序中捕获和自定义错误(如404(未找到))的正确方法是在Startup.cs中的Configure()中使用app.UseStatusCodePages()中间件。我已经这样做了,或者更具体地说,我已经使用了app.UseStatusCodePagesWithReExecute(),因为我想创建自己的错误页面。

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

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

Customized 404 error

好的,所以这似乎有效。

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

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

404.7 error

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

  1. 为什么会这样?当我使用app.UseStatusCodePages()时,为什么这个404.7错误没有被中间件捕获,就像404错误一样?

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

  3. 但是(i)ASP Core 2.0应用程序中没有web.config,因此我不知道这些设置可能来自何处,以及(ii)我认为ASP Core 2.0使用的是Kestral,而不是IIS,我也没有在我的应用中看到任何Kestral设置。

    1. 我可以用自己的自定义错误页面替换此错误页面,就像处理404错误一样?

1 个答案:

答案 0 :(得分:0)

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

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