在我尝试学习和理解 WebAPI 的过程中,我想我已经了解到 APIController 方法的返回值被包装到 HttpResponseMessage 中。
您还可以选择创建一个新的 HttpResponseMessage 并将其放入List<Product>
其中。
例如,我对测试标头感兴趣,如果我用下面的代码传入一个接受标头,我想测试响应中返回的内容类型。
我知道我总是可以返回一个 HttpResponseMessage,因为严格来说这就是它的作用,但我只是想知道是否有一种方法可以将来自控制器方法的响应作为 HttpResponseMessage 转换回,而不必创建一个 HttpServer/HttpConfiguration 设置,如此处所示。
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);