如何使用 ASP.NET Core 显示错误
Posted
技术标签:
【中文标题】如何使用 ASP.NET Core 显示错误【英文标题】:How to display errors with ASP.NET Core 【发布时间】:2014-08-25 03:43:42 【问题描述】:我有一个使用 ASP.NET Core 玩的相当简单的网站。我正在从命令行运行应用程序,并且网站正在返回静态文件,但是当我尝试发出应该由 MVC 处理的请求时,我不断收到 500 个错误。我如何查看错误是什么?错误是显示到浏览器还是记录到控制台都没有关系,我只是想要一种方法来查看错误是什么。
【问题讨论】:
【参考方案1】:添加错误页面中间件如图here:
app.UseDeveloperExceptionPage();
【讨论】:
UseErrorPage 在什么命名空间?我将 Microsoft.Own 添加到我的 asp.net vnext Web 项目中,但没有 UseErrorPage。这是 MSDN 上的内容msdn.microsoft.com/en-us/library/dn253556(v=vs.113).aspxMicrosoft.AspNet.Diagnostics
。见github.com/aspnet/Diagnostics/tree/dev/src/…
这个选项从 beta5-6 开始被移除
@Highmastdon 它回来了吗?它现在就在那里! docs.asp.net/en/latest/fundamentals/error-handling.html
!!确保 app.UseDeveloperExceptionPage();位于 Startup.cs 的配置部分的 VERY BEGINNING!【参考方案2】:
beta8 更新:
在 beta8 中,Microsoft 将名称更改为 UseDeveloperExceptionPage
。所以如果你想使用ErrorPage,调用:
app.UseDeveloperExceptionPage();
这是相关Github issue的链接。ErrorPageOptions
与 beta6/7 中的相同。
你可以使用
app.UseErrorPage(ErrorPageOptions.ShowAll)
直到 Asp.Net Mvc 的 beta5。
从 beta6 开始,ErrorPageOptions.ShowAll
已被删除。您现在可以使用不带参数的版本
app.UseErrorPage();
或创建一个 ErrorPageOptions 对象并通过设置 SourceCodeLineCount 指定要在错误周围显示多少行。
app.UseErrorPage(new ErrorPageOptions() SourceCodeLineCount = 100);
其他信息
他们删除了this commit 中ErrorPageOptions
的多个属性。
之前:
public class ErrorPageOptions
private bool _defaultVisibility;
private bool? _showExceptionDetails;
private bool? _showSourceCode;
private bool? _showQuery;
private bool? _showCookies;
private bool? _showHeaders;
private bool? _showEnvironment;
...
之后:
public class ErrorPageOptions
public int SourceCodeLineCount get; set;
public IFileProvider FileProvider get; set;
...
所以现在你只能设置要打印多少行源代码。
【讨论】:
这必须再次更改,因为我使用的是 beta7,并且我有 showExceptionDetails、showSourceCode 等选项以及 SourceCodeLineCount 你有吗?你确定你使用的是 beta7 吗?几天前我在 Github 上查看了它的源代码,并且确实只找到了我在这里发布的代码。但我还是会再看一遍 @user2736022 我再次检查,我在 beta7 中没有选项。您能否在使用 ErrorPageOptions 的地方发布一些代码以及包含哪些命名空间? 在 beta 8 和 Visual Studio 2015 中,它现在默认添加到 Startup.cs if (env.IsDevelopment())【参考方案3】:如果您不关心您的错误详细信息会暴露给外界,您可以直接在浏览器中启用错误详细信息,而无需更改任何代码。 (仅在 IIS 8.5
中测试过):
IIS Manager
左侧Connections
部分,左键单击选择您的Site
。
在右侧Feature View
打开Error Pages
。
在最右边的Actions
部分,单击Edit Feature Settings
在Error Responses
中,选择第二个Detailed errors
选项,然后选择Ok
(或者如果您担心向世界公开内容,请从第三个选项开始,如果您可以打开本地浏览器.. . 即本地主机:...)
这应该足以让您能够看到确切的错误... 重要提示:如果您必须使用中间的 Detailed errors
选项,请务必在调试后将其关闭问题。这可以为黑客提供闯入您的服务器所需的一切。
【讨论】:
这非常方便,您不必重新部署站点。【参考方案4】:如果向世界公开错误的详细信息并不重要,那么您可以在 web.config 中激活详细的错误页面。
只需在位于您网站根文件夹的 web.config 文件的 <configuration>
/ <system.web>
中添加 <customErrors mode="Off"/>
。
更详细的解释: How to Use Web.Config customErrors for ASP.NET
这样做的好处是您不必重新部署您的网站
【讨论】:
这与 OP 的问题无关。他正在使用 .NET Core,而您的答案是 ASP.NET 这也适用于 ASP.Net。 web.config 设置优先。不过我不会这样做,这似乎是一种不好的做法……或者至少,丑陋。以上是关于如何使用 ASP.NET Core 显示错误的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 DataAnnotations & Regex - c# - ASP.NET Core
如何使 Asp.NET Core MVC 应用程序在授权重定向上使用外部 url?
如何使 ASP.NET Core 中的身份验证 cookie 无效?