Asp.net mvc WebAPI GetRouteData在自主机上工作,在web主机上失败
我有正在发布的JSON数据,它通过完整的URL引用其他资源,如下所示: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,
{
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
,我得到了相同的例外。但至少现在我知道我的用例有一些特别之处。