2016-12-26 49 views
0

我試圖通過的ASP.NET Web API調用返回用JSON數據對象。
我想在形式IHttpActionResult
回報GET請求異常對象的濾鏡

{ 
    "message": "success", 
    "statuscode": "SuccessCode", 
    "statusmessage": "SuccessMsg", 
    "data": [ 
    { 
     "corrBD1": null, 
     "flagType1": null, 
     "status1": null, 
     "mstrRep1": null, 
     "repname1": null, 
     "nameAccount1": null, 
     "acDate1": "0001-01-01T00:00:00", 
     "preAddress1": null, 
     "currAddress1": null 
    }] 
} 

我可以在一個有效的GET請求,因爲這些信息返回返回數據:

return OK(employee); 

,但時有發生異常我需要返回相同形式的數據

{ 
    "message": "fail", 
    "statuscode": "400", 
    "statusmessage": "failmsg", 
    "data": null 
} 

但異常過濾器強制我發送響應的形式爲HttpResponseMessage(很遺憾不能以需要的形式返回) 如何做到這一點?

回答

1

如果我理解正確的問題,你只是想用你的一致消息語法的結果,無論您正在處理的控制器或異常過濾器的響應。您應該能夠創建自己的IHttpActionResult做你想做什麼:

private class MyResult : IHttpActionResult 
    { 
     public HttpRequestMessage Request { get; set; } 

     public string Content { get; set; } 

     public Task<HttpResponseMessage> ExecuteAsync(CancellationToken cancellationToken) 
     { 
      HttpResponseMessage response = 
       new HttpResponseMessage(HttpStatusCode.InternalServerError); // or whatever 
      response.Content = new StringContent(Content); // your content here 
      response.RequestMessage = Request; 
      return Task.FromResult(response); 
     } 
    } 

在你的處理器,你只需設置ExceptionHandlerContext.Request到上面創建的實例。這是否適合您的情況?

0

感謝傑里米!我已經實施你的解決方案。我已經做了一些改變,並能夠實現預期的結果。
請檢查代碼並給出建議。

public class CustomExceptionResult : IHttpActionResult 
     { 
      private HttpRequestMessage _request; 
      private HttpResponseMessage _httpResponseMessage; 


      public CustomExceptionResult(HttpRequestMessage request, HttpResponseMessage httpResponseMessage, Employee data) 
      { 
       _request = request;     

       _httpResponseMessage = request.CreateResponse(HttpStatusCode.InternalServerError, data); 

      } 

      public Task<HttpResponseMessage> ExecuteAsync(CancellationToken cancellationToken) 
      { 
       return Task.FromResult(_httpResponseMessage); 
      } 
     } 


這是我的異常處理程序代碼。

public class NotFoundExceptionFilter:ExceptionFilterAttribute 
    { 

     public override void OnException(HttpActionExecutedContext context) 
     { 
      if (context.Exception is KeyNotFoundException) 
      { 
       var msg = context.Exception.Message; 
//class for creating standard Json object 
       JsonWrapper data= new JsonWrapper("There is some problem with the key you are looking for","400","Bad Request",null); 
       Controllers.NotFoundExceptionResult result = new Controllers.NotFoundExceptionResult(context.Request, data); 
       context.Response = context.Request.CreateResponse(HttpStatusCode.BadRequest, result);     
      } 
      else 
      { 
       base.OnException(context); 
      } 
     } 
    } 


我得到下面的Json中結果:

​​3210
+1

看起來你能夠做你需要的東西與NotFoundExceptionResult,所以不知道你需要自定義一個(除非這就是你用來創建後者的原因)。 –

+0

謝謝傑里米!你是對的 –