我有一个 ASP.NET 5 站点,我想向其中添加自定义错误页面。我习惯在 web.config 中添加条目(从 ASP.NET 4 天开始),但我想在 ASP.NET 5 中使用新方法。因此,我的 Startup.cs 类中有以下内容:
if (env.IsEnvironment("Development"))
{
app.UseErrorPage(ErrorPageOptions.ShowAll);
}
else
{
app.UseStatusCodePagesWithReExecute("/Home/Error");
app.UseErrorHandler("/Home/Error");
}
当我使用 kestral 在本地运行时,我的错误页面会正确显示。但是,当我部署到 Azure 时,当我尝试测试 404 错误时,我收到非常通用的白色错误页面:
“您正在查找的资源已被删除、更名或暂时不可用。”
我尝试在我的 web.config 中实现这个答案,但它没有解决我的问题:
https://stackoverflow.com/a/29539669/8320
这是我的 web.config 的相关部分:
<system.web>
<customErrors mode="Off" />
</system.web>
我还确保 Azure 网站的“配置/应用程序设置”部分中的 ASPNET_ENV="Production"。
有什么想法吗?如果我可以提供更多信息,请告诉我。
最佳答案
IIS 是一个棘手的野兽,我们仍在 ASP.NET 5 中解决这个问题。当您在 IIS 上运行时,我们通过中间件管道运行,然后在没有处理请求的情况下回调到 IIS native 模块。当您收到任何中间件都未处理的 404 错误时,它将重新进入 IIS 管道并触发 IIS 特定的错误页面。 UseStatusCodePagesWithReExecute 中间件仍在运行,但此时 IIS 已将 header 和正文发送到客户端(在本例中为浏览器)。
关于ASP.NET 5 自定义错误页面未在 Azure 网站上呈现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30902135/