아래의 단위 테스트를 사용합니다. 내 webapi를 테스트하려고 시도합니다. null
uri
이 때문에 조치를 생성Url.Link가 WebAPI에서 작동하지 않습니다.
[Test]
public void CheckControllerForCreate()
{
var config = new HttpConfiguration();
config.IncludeErrorDetailPolicy = IncludeErrorDetailPolicy.Always;
var request = new HttpRequestMessage(HttpMethod.Post, "http://localhost/api/product");
var route = config.Routes.MapHttpRoute("Foo", "api/{controller}/{id}");
var routeData = new HttpRouteData(route, new HttpRouteValueDictionary { { "controller", "products" } });
var controller = new ProductController
{
ControllerContext = new HttpControllerContext(config, routeData, request),
Request = request,
Url = new UrlHelper(request)
};
controller.Request.Properties[HttpPropertyKeys.HttpConfigurationKey] = config;
var result = controller.Create(new Product {Id = 4, Name = "Tomato Soup", Category = "Groceries", Price = 1});
}
[HttpPost]
public HttpResponseMessage Create(Product product)
{
var url = Url;
if (product == null)
throw new HttpResponseException(new HttpResponseMessage{StatusCode = HttpStatusCode.BadRequest,ReasonPhrase = "Product is not specified"});
products.Add(product);
var response = Request.CreateResponse(HttpStatusCode.Created, product);
string uri = Url.Link("Foo", product.Id);
response.Headers.Location = new Uri(uri);
return response;
}
예외가 발생. 이제 URL 도우미가 RouteName을 올바르게 선택하고 있습니다. 그렇지 않으면 RouteName을 찾을 수 없습니다. 예외가 발생합니다. 나는 내 구성에 일문이 잘못되었다고 생각하고 있습니다.
컨트롤러를 테스트하기 위해 http://www.peterprovost.org/blog/2012/06/16/unit-testing-asp-dot-net-web-api 및 기타 여러 게시물을 참조했습니다.
WebAPI 방법은 CodePlex의
여기에 편집
입니다 나는IHttpVirtualPathData vpd = configuration.Routes.GetVirtualPath(
request: request,
name: routeName,
values: routeValues);
하는 수없는 것 (UrlHelper)에 널 (null) 인 VPD 그것을 좁혀
왜 그런지 알아 내려고?
controller.Request.Properties[HttpPropertyKeys.HttpRouteDataKey] = routeData;
이 또한 잘못 Url.Link
도우미를 사용하고 있습니다 :
이 시도하고이 .. URI가 여전히 널 작동하지 않습니다. –
좋아요, 그럼 당신을 위해 전체 작업 테스트를 작성하십시오. 전체 작동 예제는 내 업데이트 된 답변을 참조하십시오. –
내 경로 설정이 잘못되었다고 생각합니다. 제 의도는 제 컨트롤러에 제품을 전달할 수 있다는 것입니다. 지금 바로 정수를 전달하고 경로도 같은 것입니다. 내 라우팅? –