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