Raf*_*aeu 11 asp.net-mvc asp.net-web-api asp.net-mvc-5
我已经将我的web api项目升级到最新版本,使用MVC 5应用程序运行正常,但这行代码在单元测试中不再有效:
string uri = this.Url.Link("DefaultApi", new { id = savedOrganization.Id });
Run Code Online (Sandbox Code Playgroud)
控制器的Url属性现在为null.这是我配置模拟控制器的方式:
var config = new HttpConfiguration();
var request = new HttpRequestMessage(HttpMethod.Post, "http://xxx/api/organization");
var route = config.Routes.MapHttpRoute("DefaultApi", "api/{controller}/{id}");
var routeData = new HttpRouteData(route, new HttpRouteValueDictionary {{"controller", "organization"}});
controller.ControllerContext = new HttpControllerContext(config, routeData, request);
controller.Request = request;
controller.Request.Properties[HttpPropertyKeys.HttpConfigurationKey] = config;
controller.Request.Properties[HttpPropertyKeys.HttpRouteDataKey] = routeData;
Run Code Online (Sandbox Code Playgroud)
在升级到MVC 5之前,它运行正常.
当我调试测试时,它显示Url属性现在为null

Raf*_*aeu 14
看起来在MVC 5中,Url属性是以不同的方式创建的.我在测试中介绍了这一行,现在Url属性恢复正常
private static void SetupControllerForTests(ApiController controller)
{
var config = new HttpConfiguration();
var request = new HttpRequestMessage(HttpMethod.Post, "http://api.clientele-itsm.com/api/organization");
var route = config.Routes.MapHttpRoute("DefaultApi", "api/{controller}/{id}");
var routeData = new HttpRouteData(route, new HttpRouteValueDictionary
{
{"id", Guid.Empty},
{"controller", "organization"}
});
controller.ControllerContext = new HttpControllerContext(config, routeData, request);
UrlHelper urlHelper = new UrlHelper(request);
controller.Request = request;
controller.Request.Properties[HttpPropertyKeys.HttpConfigurationKey] = config;
controller.Request.Properties[HttpPropertyKeys.HttpRouteDataKey] = routeData;
/// inject a fake helper
controller.Url = urlHelper;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3747 次 |
| 最近记录: |