【发布时间】:2020-03-27 12:44:45
【问题描述】:
我正在使用带有 ASP.net core 2.1 的基于 Kestrel 的服务器应用程序。我有一个这样的自定义错误处理中间件:
public class ErrorHandlingMiddleware
{
private readonly RequestDelegate next;
public ErrorHandlingMiddleware(RequestDelegate next)
{
this.next = next;
}
public async Task Invoke(HttpContext context /* other dependencies */)
{
try
{
await next(context);
}
catch (Exception ex)
{
await HandleExceptionAsync(context, ex);
}
}
private static Task HandleExceptionAsync(HttpContext context, Exception exception)
{
Log.Warning(exception,"Exception occurred: {exception}",exception);
var code = HttpStatusCode.InternalServerError; // 500 if unexpected
var result = JsonConvert.SerializeObject(new { error = exception.Message });
context.Response.ContentType = "application/json";
context.Response.StatusCode = (int)code;
return context.Response.WriteAsync(result);
}
}
它似乎在 99% 的情况下都有效,但时不时地,然后服务器进程停止,我看到一些异常作为最后记录的条目。不幸的是,我无法在我的开发机器上重现它,它只出现在生产系统上。据我了解,这无论如何都不应该发生。
是否有任何已知错误可以使服务器停止?有什么我可以启用的诊断功能吗?
记录的异常的堆栈跟踪通常表明输入存在一些问题,或者我想使用 ErrorHandlingMiddleware 报告的事情。
【问题讨论】:
标签: c# asp.net-core exception kestrel-http-server