在 Azure Web 应用中显示 ASP.NET 5 错误页面

Posted

技术标签:

【中文标题】在 Azure Web 应用中显示 ASP.NET 5 错误页面【英文标题】:Show ASP.NET 5 error page in Azure web app 【发布时间】:2015-08-13 15:10:49 【问题描述】:

在将 ASP.NET 5 Web 应用程序部署到 Azure Web 应用程序时,我收到 500 内部服务器错误。

如何获取此异常的详细信息和堆栈跟踪?

我做了以下但没有运气:

在启动时使用诊断错误页面:

app.UseErrorPage();

在 Azure 门户中设置 ASPNET_ENV

使用 DNX 测试版 6。

【问题讨论】:

我刚刚花了半天时间尝试在 Azure 上调试 500 错误,完全没有运气。甚至还没有到启动 - 所以添加异常处理没有用!我创建了新的 MVC 项目并部署到具有相同发布设置的同一个 azure 站点,并且效果很好。重新发布失败的站点。同样的 500 错误。最后,我在 azure 上创建了新网站并部署到该网站。第一次工作。那么问题出在哪里?这真的让我担心生产部署。没有错误,无法调试,代码或部署方法/配置没有问题。 【参考方案1】:

如果这对某人有帮助,我发现如果您使用的是 ASP.NET RC1 并且您使用的是 Azure WebApps,并添加一个名为 Hosting:Environment 的应用程序设置,其值为 development 堆栈跟踪将显示服务器 500 错误。

为了使 Startup.cs 中的 Configure 方法起作用,当您使用开发环境时,需要使用 Developer Exception 页面。例如:

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory) 
    if (env.IsDevelopment())
    
        app.UseDeveloperExceptionPage();
        app.UseDatabaseErrorPage();
    

    // etc

【讨论】:

感谢您更新老问题。 谢谢,目前正在运行 RC1,这很有帮助! 在 Core 1.0.0 中添加 Azure 中的“Hosting:Environment”应用设置会导致显示整个错误。没有其他东西对我有用。谢谢!! 巨大的帮助!谢谢! 它对我有用,谢谢!我正在将 .Net core 1.0 应用程序迁移到 2.0。尝试导航到用户列表后,它会抛出此 500 错误。我试过远程调试,没有帮助。通过 web.config 设置 logs/stdout 文件夹,没有帮助。此解决方案简单实用。【参考方案2】:

根据this post(感谢 Muhammad),我应该能够通过编辑服务器的 web.config 来获得 Azure 上的运行时错误(非常正确,Celt)。

很遗憾,这不起作用 - 没有详细的例外情况。

我做了一些挖掘,发现了这些“DetailedError”日志:

这是他们包含的内容:

尝试在D:\home\site\wwwroot\favicon.ico 解析favicon.ico 时似乎出现了问题。

在那个位置确实没有网站图标。我纠正了这个,但仍然是同样的问题。事实上,我从来没有一个网站图标,而且这曾经可以工作。

最后,我在 Azure Portal 中删除了整个 Web App 并重新发布了……TADA,它又可以工作了。

【讨论】:

呃。也许我也应该删除并重新开始。我已经查看了所有详细的错误日志,启用了跟踪调试等。没有任何答案。 我仍在与这些问题作斗争。非常令人沮丧且不直观。 我能够通过注释掉 startup.cs 中的所有代码来确定问题的原因,然后取消注释,直到找到有问题的代码。它最终成为我的数据库连接字符串问题。这是一个可怕的问题。 这对我也有用。 20 年过去了,大多数 ms 产品的修复仍然是重新启动或重新安装。【参考方案3】:

尝试在 Web.config 文件中将 customErrors 模式设置为关闭,如下所示:

<system.web>
  <customErrors mode="Off" />
</system.web>

【讨论】:

这是 ASP.NET 5。没有web.config 哦,抱歉,我还没有使用过 ASP.NET 5,但我认为它仍然存在。 您需要自己添加一个。见docs.asp.net/en/latest/fundamentals/diagnostics.html 我和@davenewza 有同样的问题。我已经尝试了很多建议(包括这个),但我仍然一无所获。 @jessegavin:看看我的回答。【参考方案4】:

当您从运行 ASP.NET 5 的 Azure Web 应用程序获得 HTTP 500 并且您无法获得详细的错误输出时,根据我的经验,这是由于以下两个原因之一:

您的 Startup.cs 导致了问题 无法加载运行时

为了处理第一类问题,您最好编写一个错误处理程序,在某处记录启动错误(我们为此使用 Raygun.io,您的需求和偏好应该决定您的解决方案)。

对于第二种,我想出的最好方法是通过网站的诊断功能——您可以访问 Windows Server 事件日志,它会告诉您运行时是否中断。

【讨论】:

我需要尝试诊断功能。首先,我必须将应用升级到标准。 根据您的经验,“运行时不正常”的原因是什么 - 不管这意味着什么 ;-) ?解决方案是什么?谢谢。 好吧,要么runtime没有和app打包,要么就是版本不对(你可以很容易地为dnu publish指定错误的runtime) 另外,诊断启动错误的一种好方法是在本地构建相同的包并通过命令行运行它。【参考方案5】:

您的 startup.cs 有一些运行时代码不能很好地与 Azure 配合使用。通过移动 app.UseDeveloperExceptionPage(); 强制开发人员友好的异常页面呈现到 Configure(...) 的开头。将更新的代码发布到 Azure,重新加载主页和异常现在会很有帮助。

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
     
          app.UseDeveloperExceptionPage();
      ...
     

【讨论】:

【参考方案6】:

我遇到了完全相同的问题 - 总是得到 500 并且从未见过最小的日志或信息什么问题。即使在注释掉 Startup.cs 中的所有内容并简单地访问静态文件后,我也得到了 500(尽管令人惊讶的是,有时静态文件 服务正确,但它从同一应用的发布变为发布)。

我认为某些文件在我的部署中损坏了,而 azure 没有检测到它。或者,服务器上可能有一些文件在运行时导致冲突 - 下次我认为更改发布配置文件以不在服务器上保留额外文件(默认情况下不会删除)也是值得的。

我最终删除并重新创建了应用程序,这解决了问题。

【讨论】:

【参考方案7】:

如果您仍然像我一样使用旧版本的 DNX 堆栈(使用 beta5,这是 Visual Studio 2015 附带的),他们的设置并没有真正记录好。我相信从那时起这已经改变了,但这是您必须在 web.config 中放置的内容:

  <appSettings>
    <add key="ASPNET_DETAILED_ERRORS" value="true" />
  </appSettings>

【讨论】:

你为什么还在 beta5 上?

以上是关于在 Azure Web 应用中显示 ASP.NET 5 错误页面的主要内容,如果未能解决你的问题,请参考以下文章

使用 Web Deploy 在 Azure 中部署普通的 ASP.NET Core 2.2 Web 应用程序会引发错误

Web 应用程序之间的 Asp.Net Core DataProtection 无法在 Azure 上运行

从托管为 Azure Web App 的 ASP.NET 5 应用程序记录日志

Azure 中托管的 ASP.Net Web API 高响应时间

在 Chrome 中托管在 Azure 中的 ASP.NET Core Web 应用程序上的异常 HTTP 响应

在 Azure 应用服务中发布 ASP.NET Core 5 Web API 应用时出现问题