在我學習和理解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);
您是否嘗試創建一個獨立的服務器併發送一個實際的HTTP請求作爲Despertar建議或創建一個單元測試直接檢查您的控制器代碼創建一個集成測試? –
嗯,我希望我可以讓它可以被調用,並得到一個有效的HTTP響應沒有HttpServer – Jon
你需要一個正在運行的控制器實例,然後按照Despertar的建議。 –