我的全局异常过滤器在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);
}
答案 0 :(得分:1)
您需要等待异步方法。它在本地有效,因为您有竞争条件,即写入响应而不是返回响应。
您应该实现一个异步Filter,它可以让您等待异步调用的结果并避免竞争情况:
public async Task OnExceptionAsync(ExceptionContext context)
{
//...
await response.WriteAsync(Newtonsoft.Json.JsonConvert.SerializeObject(exObj))
}