我一直在测试一些使用UrlHelper
的ASP.NET Web API代码。我发现对UrlHelper.Link
的调用返回null。在深入挖掘ASP.NET源代码后,我发现有必要设置请求的IHttpRouteData
,以便HttpRoute.GetVirtualPath
按预期工作。
我想了解为什么这是必要的,特别是因为我们设置路线数据似乎并不重要,只是因为它存在。例如,要测试出站URL生成,可以使用以下方法:
private string GenerateURL(string routeName, object routeValues = null)
{
var request = new HttpRequestMessage(HttpMethod.Get, "http://localhost/");
request.Properties[HttpPropertyKeys.HttpRouteDataKey]
= new HttpRouteData(new HttpRoute()); // this has to be set
var dict = new HttpRouteValueDictionary(routeValues);
// Have to add "httproute" route value to ensure url is generated
dict.Add("httproute", true);
var vp = httpConfiguration.Routes.GetVirtualPath(request, routeName, dict);
if (vp == null)
{
return null;
}
return vp.VirtualPath;
}