簡體   English   中英

全局異常處理WebApi 2,遇到HTTPPOST問題

[英]Global exception handling WebApi 2 , Having trouble with HTTPPOST

我試圖在全球范圍內處理異常。 這是我的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。

看來你的GlobalExceptionHandler類實現了ExceptionHandler,它有方法ShouldHandle。 當請求方法是POST或PUT時,此方法返回false,以及其他方案。 要解決此問題,請考慮重寫方法以返回true:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM