WebAPI GetRouteData在自主机中工作,在web主机上失败



我有正在发布的JSON数据,该数据通过其他资源的完整URL引用其他资源,如下所示:

{
    jobItems : [
        "http://example.com/item/3",
        "http://example.com/item/5" 
    ]
}

在我的WebAPI控制器中,我通过重用相应的路由来解析这些URL:

private static IHttpRouteData ParseLink(
    this ApiController controller,
    string routeName,
    Uri uri)
{
    var fakeRequest = new HttpRequestMessage(HttpMethod.Get, uri);
    string virtualPathRoot = controller.Configuration.VirtualPathRoot;
    var route = controller.Configuration.Routes[routeName];
    return route.GetRouteData(virtualPathRoot, fakeRequest);
}

以上内容在独立的自托管WebAPI部署中运行良好。但是,当我在web主机(IIS)上的ASP.NET MVC4应用程序中部署WebAPI控制器时,GetRouteData会引发以下异常:

System.NotImplementedException
   at System.Web.HttpContextBase.get_Items()
   at System.Web.Http.WebHost.Routing.HttpContextBaseExtensions.GetHttpRequestMessage(HttpContextBase context)
   at System.Web.Http.WebHost.Routing.HttpWebRoute.ProcessConstraint(HttpContextBase httpContext, Object constraint, String parameterName, RouteValueDictionary values, RouteDirection routeDirection)
   at System.Web.Routing.Route.ProcessConstraints(HttpContextBase httpContext, RouteValueDictionary values, RouteDirection routeDirection)
   at System.Web.Routing.Route.GetRouteData(HttpContextBase httpContext)
   at System.Web.Http.WebHost.Routing.HostedHttpRoute.GetRouteData(String rootVirtualPath, HttpRequestMessage request)

怎么了?我该如何解决这个问题?

您可以尝试以下方法来修复它:

private static IHttpRouteData ParseLink(this ApiController controller, Uri uri)
{
    var fakeRequest = new HttpRequestMessage(HttpMethod.Get, uri);
    return controller.Configuration.Routes.GetRouteData(fakeRequest);
}

最新更新