如何使用 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).aspx Microsoft.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 SettingsError 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 显示错误的主要内容,如果未能解决你的问题,请参考以下文章