全局异常处理WebApi 2,遇到HTTPPOST问题

时间:2016-04-05 06:32:16

标签: c# exception-handling asp.net-web-api2

我正在尝试全局处理异常。 这是我的exceptionHandlerClass

   public override void Handle(ExceptionHandlerContext context)
    {
        HttpResponseMessage resp;
        resp = new HttpResponseMessage(HttpStatusCode.BadRequest)
        {
            Content = new StringContent(context.Exception.Message),
            ReasonPhrase = context.Exception.Message
        };
        context.Result = new ErrorMessageResult(context.Request, resp);
    }
}
public class ErrorMessageResult : IHttpActionResult
{
    private readonly HttpResponseMessage _httpResponseMessage;
    private HttpRequestMessage _request;

    public ErrorMessageResult(HttpRequestMessage request, HttpResponseMessage httpResponseMessage)
    {
        _request = request;
        _httpResponseMessage = httpResponseMessage;
    }
}

WebApiConfig.cs中注册的异常处理程序

   config.Services.Replace(typeof(IExceptionHandler), new GlobalExceptionHandler());

以下是控制器中针对httppost和httpget

的操作
   [Route("ArgumentNull/{id}")]
    [HttpPost]
    public IHttpActionResult ArgumentNull(int id)
    {
        Report objModel = new Report();
        objModel.ThrowItemNotFoundException();
        return Ok();
    }
    [Route("ArgumentNull/{id}")]
    [HttpGet]
    public IHttpActionResult ArgumentNullGet(int id)
    {
        Report objModel = new Report();
        objModel.ThrowItemNotFoundException();
        return Ok();
    }

所以对于httpget的响应是在globalExceptionHandler类中捕获的,但是httpPost只会在堆栈跟踪(不需要的信息)时抛出错误,有人可以告诉我,如果我错过了soemthing。

1 个答案:

答案 0 :(得分:0)

您的GlobalExceptionHandler类似乎实现了ExceptionHandler,该类具有方法ShouldShandle。在其他情况下,当“请求方法”为POST或PUT时,此方法返回false。要解决此问题,请考虑重写方法以返回true:

public override bool ShouldHandle(ExceptionHandlerContext context)
    {
        return true;                        
    }