实现IExceptionHandler
时,结果是IHttpActionResult
,但是createResponse
返回HttpResponseMessage
。我只想从请求上下文创建响应消息。它进行内容协商,我希望使用已经存在的东西,而不是自己创建实现IHttpActionResult的自定义模型。
Controller 可以访问帮助程序,以轻松地将HttpResponseMessage转换为HttpActionResult,但是我在 Controller 之外找不到任何东西。我最好的选择是什么?
var myCustomException = context.Exception as MyCustomException;
if (myCustomException != null)
{
context.Result = context.Request.CreateResponse(myCustomException.StatusCode,
myCustomException.Error);
return;
}
context.Result = context.Request.CreateResponse(HttpStatusCode.InternalServerError,
new MyCustomError("Something went wrong"));
最佳答案
MSDN页面将帮助您:https://docs.microsoft.com/en-us/aspnet/web-api/overview/error-handling/web-api-global-error-handling
您需要一个全局错误处理程序。这是核心代码,您将在MSDN页面中找到详细信息。
class OopsExceptionHandler : ExceptionHandler
{
public override void HandleCore(ExceptionHandlerContext context)
{
context.Result = new TextPlainErrorResult
{
Request = context.ExceptionContext.Request,
Content = "Oops! Sorry! Something went wrong." +
"Please contact support@contoso.com so we can try to fix it."
};
}
private class TextPlainErrorResult : IHttpActionResult
{
public HttpRequestMessage Request { get; set; }
public string Content { get; set; }
public Task<HttpResponseMessage> ExecuteAsync(CancellationToken cancellationToken)
{
HttpResponseMessage response =
new HttpResponseMessage(HttpStatusCode.InternalServerError);
response.Content = new StringContent(Content);
response.RequestMessage = Request;
return Task.FromResult(response);
}
}
}
顺便说一句,您应该提到MVC版本:
这是详细信息:https://docs.microsoft.com/en-us/aspnet/core/migration/webapi?view=aspnetcore-2.1#migrate-models-and-controllers
关于c# - 在 Controller 外部将HttpResponseMessage转换为HttpActionResult的最简单方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51383284/