.NET Core异常过滤器

时间:2017-03-07 17:52:52

标签: c# asp.net-core

我的全局异常过滤器在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);
}

1 个答案:

答案 0 :(得分:1)

您需要等待异步方法。它在本地有效,因为您有竞争条件,即写入响应而不是返回响应。

您应该实现一个异步Filter,它可以让您等待异步调用的结果并避免竞争情况:

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