Eli*_*eth 6 c# asp.net-web-api asp.net-web-api2
public class GlobalExceptionHandler : ExceptionHandler
{
public override void Handle(ExceptionHandlerContext context)
{
context.Result = new NiceInternalServerExceptionResponse("The current operation could not be completed sucessfully.);
}
}
Run Code Online (Sandbox Code Playgroud)
调用此Get操作时:
[HttpGet]
public async Task<IHttpActionResult> Get()
{
Convert.ToInt16("this causes an exception state");
var data = await service.Get();
return Ok(data);
}
Run Code Online (Sandbox Code Playgroud)
引发异常...并且触发了我的全局exc处理程序。
当我的自定义响应返回给客户端时,我的提琴手总是说:
结果:200
我也可以将更return Ok(data);改为return NotFound();
这不会改变结果状态代码中的任何内容。
如何覆盖/拦截http状态创建并返回自己的状态代码500?
在我的Web客户端上,仅当返回状态码500时,我需要显示一个带有登录ID +错误消息的漂亮错误对话框。
您需要在以下位置设置状态代码IHttpActionResult:
public class NiceInternalServerExceptionResponse : IHttpActionResult
{
public string Message { get; private set; }
public HttpStatusCode StatusCode { get; private set; }
public NiceInternalServerExceptionResponse(
string message,
HttpStatusCode code)
{
Message = message;
StatusCode = code;
}
public Task<HttpResponseMessage> ExecuteAsync(CancellationToken cancellationToken)
{
var response = new HttpResponseMessage(StatusCode);
response.Content = new StringContent(Message);
return Task.FromResult(response);
}
}
Run Code Online (Sandbox Code Playgroud)
在你的GlobalExceptionHandler通行证HttpStatusCode.InternalServerError(500)中:
public override void Handle(ExceptionHandlerContext context)
{
context.Result = new NiceInternalServerExceptionResponse(
"The current operation could not be completed sucessfully.",
HttpStatusCode.InternalServerError);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4985 次 |
| 最近记录: |