如何在Asp.Net Core中自定义Developer Exception页面?

时间:2017-01-26 20:34:34

标签: asp.net-core-mvc

在Startup.cs文件的Configure方法中,常见的代码如下所示:

if(env.IsDevelopment()) {
     app.UseDeveloperExceptionPage();
} 

app.UseDeveloperExceptionPage();行导致在发生异常时在浏览器中显示详细信息,这对调试很有帮助。

我确定你已经看过输出了,它看起来像这样:

enter image description here

这是一个很好的开始,但有时作为开发人员,我们会向异常添加其他信息以提供有关错误的详细信息。 System.Exception类有一个Data集合,可用于存储此类信息。因此,例如,继承自AppException的自定义Exception具有一个构造函数,除了标准异常消息之外还接受私有消息,如下所示:

 /// <summary>
 /// Application Exception. 
 /// </summary>
 /// <param name="message">Message that can be displayed to a visitor.</param>
 /// <param name="privateMessage">Message for developers to pinpoint the circumstances that caused exception.</param>
 /// <param name="innerException"></param>
    public AppException(string message, string privateMessage, Exception innerException = null) 
        : base(message, innerException) {

        //Placing it in the exception Data collection makes the info available in the debugger
        this.Data["PrivateMessage"] = privateMessage;
    }

因此,当您可以进行成像时,如果开发人员异常页面显示PrivateMessage中的Exception(如果它是AppException)以及所有其他信息,那就太好了。我看起来高低不知道如何定制或扩充开发人员异常页面上显示的信息,但却无法找到有关它的任何好信息。

如何自定义或扩充开发人员例外页面上显示的信息?

2 个答案:

答案 0 :(得分:2)

app.UseDeveloperExceptionPage()扩展方法是将DeveloperExceptionPageMiddleware添加到请求/响应管道中的简写。您可以找到DeveloperExceptionPageMiddleware here的完整源代码,包括中间件本身和视图。它应该成为滚动自定义中间件的绝佳基础。

答案 1 :(得分:0)

if(number == 0) { //Do nothing // If number is zero, nothing will be executed // (because there's nothing to execute) and the // code will move to the next statement not in this // if chain } else if(number % 2 == 0) { //Do something } else if(number % 2 == 1) { //Do something else } 存在设计问题-假定所有异常均为500,并且立即开始发送响应。这意味着不可能通过在其之上应用另一个自定义中间件来纠正该中间件的行为。

因此,有两种选择:在代码中复制其漂亮的HTML错误页面或创建自己的dev异常页面(我建议将当前异常和上下文转储为JSON并将其返回给客户端)。 / p>