【问题标题】:WebApi unit testing the urlhelper is now nullWebApi 单元测试 urlhelper 现在为空
【发布时间】:2014-08-15 17:06:05
【问题描述】:

我有一些单元测试来测试 WebApi 项目中的帖子,它是一个 WebApi 1.0 版本,我已经升级到 webapi 2.0,现在在尝试构建响应时,并将新资源的位置添加到 ApiController。网址返回空值。在升级之前,这些单元测试都通过了。 这是控制器的设置

var config = new HttpConfiguration();
SetDependencyResolver(config, type);

var request = new HttpRequestMessage(method, url);
var route = config.Routes.MapHttpRoute("DefaultApi", "api/{controller}/{id}");
var routeData =
    new HttpRouteData(
        route,
        new HttpRouteValueDictionary { { "controller", controllerName } });

request.Properties[HttpPropertyKeys.HttpConfigurationKey] = config;
request.Properties[HttpPropertyKeys.HttpRouteDataKey] = routeData;

controller.Configuration = config;
controller.ControllerContext = new HttpControllerContext(config, routeData, request);
controller.Request = request;

这是失败的调用。请注意,返回 null 的是 Url 对象

response.Headers.Location = new Uri(Url.Link("DefaultApi", new { id = claimsCommand.Id }));

既然我已经升级到最新版本,那么我做错了什么?

【问题讨论】:

    标签: unit-testing asp.net-web-api


    【解决方案1】:

    我在 Stackoverflow 的其他地方找到了答案

    在WebApi 1.0中上面第一个代码示例的最后一行代码

    Controller.Request = request;
    

    控制器创建UrlHelper 并填充属性controller.Url。这在 Web Api 2.0 中不再发生。另一个线程的建议是在单元测试中自己创建它。所以我添加了这一行(如另一个线程中所建议的那样)。

    controller.Url = new UrlHelper(request); 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-08-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-27
      • 2014-09-01
      • 1970-01-01
      相关资源
      最近更新 更多