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

如何使用 DataAnnotations & Regex - c# - ASP.NET Core

如何使 Asp.NET Core MVC 应用程序在授权重定向上使用外部 url?

如何使 ASP.NET Core 中的身份验证 cookie 无效?

如何使 ASP.NET Core Web API 操作异步执行?

使用 ASP.NET Core MVC,如何显示图像?

如何使用 ASP.NET Core 解决 REACT 中的 CORS 错误