Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc WebAPI GetRouteData在自主机上工作,在web主机上失败_Asp.net Mvc_Asp.net Mvc 4_Asp.net Web Api - Fatal编程技术网

Asp.net mvc WebAPI GetRouteData在自主机上工作,在web主机上失败

Asp.net mvc WebAPI GetRouteData在自主机上工作,在web主机上失败,asp.net-mvc,asp.net-mvc-4,asp.net-web-api,Asp.net Mvc,Asp.net Mvc 4,Asp.net Web Api,我有正在发布的JSON数据,它通过完整的URL引用其他资源,如下所示: { jobItems : [ "http://example.com/item/3", "http://example.com/item/5" ] } 在我的WebAPI控制器中,我通过重用相应的路由来解析这些URL: private static IHttpRouteData ParseLink( this ApiController controller,

我有正在发布的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);
}

这有点简单,但它仍然抛出相同的异常。嗯……我确实在webhost场景中尝试过自己,并且成功了……您使用的是哪个版本的Web API?(比如您使用的是哪个版本的
Microsoft.AspNet.WebApi.Core
nuget软件包?
Ok,我尝试了
4.0.30506.0
…可能这是您正在使用的版本中的一个错误…可能您应该将其更新到上述版本,甚至更新到Web API的最新版本5.0。对于
4.0.30506.0
,我得到了相同的例外。但至少现在我知道我的用例有一些特别之处。