2012-11-26 78 views
0

在我學習和理解WebAPI的嘗試中,我想我已經瞭解到,從APIController方法返回的結果會包含到HttpResponseMessage中。演示Asp.Net API方法返回爲HttpResponseMessage

你也可以選擇創建一個新的HttpResponseMessage,並把你的List<Product>放在裏面。

我對測試頭文件感興趣,例如,如果我用下面的代碼傳遞接受頭文件,我想測試響應中返回的內容類型。

我知道我可以隨時返回HttpResponseMessage因爲嚴格的那是什麼它做什麼,但我只是想知道是否有一種方法來無論是從控制法鑄造響應返回作爲HttpResponseMessage,而無需創建一個HttpServer的/ HttpConfiguration設置如here所示。

 var config = new HttpConfiguration(); 


     var request = new HttpRequestMessage(HttpMethod.Post, "http://localhost/api/products"); 
     request.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); 

     var route = config.Routes.MapHttpRoute(
     name: "DefaultApi", 
     routeTemplate: "{controller}" 
      ); 

     var routeData = new HttpRouteData(route, new HttpRouteValueDictionary { { "controller", "GetData" } }); 
     var controller = new GetDataController(); 
     controller.ControllerContext = new HttpControllerContext(config, routeData, request); 
     controller.Request = request; 
     controller.Request.Properties[HttpPropertyKeys.HttpConfigurationKey] = config; 

     /************************* HELP!!!***************/ 
     // If Get returns List<Product> can I cast it as HttpResponseMessage?? 
     /************************************************/ 

     var result = controller.Get(); 

     // Assert 
     Assert.Equal("application/json", result.Content.Headers.ContentType.MediaType); 
+0

您是否嘗試創建一個獨立的服務器併發送一個實際的HTTP請求作爲Despertar建議或創建一個單元測試直接檢查您的控制器代碼創建一個集成測試? –

+0

嗯,我希望我可以讓它可以被調用,並得到一個有效的HTTP響應沒有HttpServer – Jon

+0

你需要一個正在運行的控制器實例,然後按照Despertar的建議。 –

回答

2

控制器方法並不意味着直接調用。您必須發送HTTP請求才能獲得HTTP響應。嘗試使用

HttpResponseMessage response = HttpClient.SendAsync(request).Result; 

但如果你沒有在IIS託管,你將不得不創建一個HttpSelfHostServer申辦過程中的控制器,以便它可以監聽請求。這將告訴你如何做到這一點,http://www.asp.net/web-api/overview/hosting-aspnet-web-api/self-host-a-web-api

+0

我不知道我同意控制器方法並不是直接調用,因爲在某些情況下,您應該調用它們,但是我想要一個HttpResponseMessage,但是想知道是否可以在沒有HttpServer的情況下完成 – Jon

+0

同意Jon。你可能想單元測試你的控制器,然後這就成了一個問題。 –

相關問題