public static Task WriteErrorToResponse(this IResponse httpRes, IRequest httpReq,
string contentType, string operationName, string errorMessage, Exception ex, int statusCode)
{
if (ex == null)
ex = new Exception(errorMessage);
var errorDto = ex.ToErrorResponse();
HostContext.AppHost.OnExceptionTypeFilter(ex, errorDto.ResponseStatus);
if (HandleCustomErrorHandler(httpRes, httpReq, contentType, statusCode, errorDto))
return TypeConstants.EmptyTask;
if ((httpRes.ContentType == null || httpRes.ContentType == MimeTypes.Html)
&& contentType != null && contentType != httpRes.ContentType)
{
httpRes.ContentType = contentType;
}
if (HostContext.Config.AppendUtf8CharsetOnContentTypes.Contains(contentType))
{
httpRes.ContentType += ContentFormat.Utf8Suffix;
}
var hold = httpRes.StatusDescription;
var hasDefaultStatusDescription = hold == null || hold == "OK";
httpRes.StatusCode = statusCode;
httpRes.StatusDescription = hasDefaultStatusDescription
? (errorMessage ?? HttpStatus.GetStatusDescription(statusCode))
: hold;
httpRes.ApplyGlobalResponseHeaders();
var serializer = HostContext.ContentTypes.GetResponseSerializer(contentType);
serializer?.Invoke(httpReq, errorDto, httpRes);
httpRes.EndHttpHandlerRequest(skipHeaders: true);
return TypeConstants.EmptyTask;
}