.NET核心异常过滤器



我的全局异常过滤器在iisexpress中本地工作,但是当应用程序部署到生产时,response.WriteAsync()似乎不起作用。

我缺少IIS的设置吗?

public void OnException(ExceptionContext context)
{
    HttpResponse response = context.HttpContext.Response;
    response.StatusCode = (int)HttpStatusCode.InternalServerError;
    response.ContentType = "application/json";
    string message = context.Exception.Message + (context.Exception.InnerException == null ? "" : " " + context.Exception.InnerException.Message);
    var exObj = new { message = message, stackTrace = context.Exception.StackTrace };
    LogErrorToDatabase(context.Exception);
    response.WriteAsync(Newtonsoft.Json.JsonConvert.SerializeObject(exObj)).ConfigureAwait(false);
}

您需要等待异步方法。它在本地起作用,因为您有种族条件,写给响应与返回响应的响应。

您应该实现异步过滤器,该过滤器将使您能够等待异步调用的结果并避免比赛条件:

public async Task OnExceptionAsync(ExceptionContext context)
{
    //...
    await response.WriteAsync(Newtonsoft.Json.JsonConvert.SerializeObject(exObj))
}

最新更新