为什么HttpRoute需要IHttpRouteData来生成虚拟路径?

时间:2013-11-23 21:35:56

标签: c# asp.net-web-api

我一直在测试一些使用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;
}

0 个答案:

没有答案