在我学习和理解WebAPI的过程中,我想我已经知道APIController方法的返回包含在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 :(得分: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