安装AttributeRouting后,Web API抛出异常

时间:2013-10-28 15:09:58

标签: invalidoperationexception attributerouting

我使用.NET 4.5开发了一个简单的VB .NET Web API项目

这个项目工作得非常好,但我决定安装AttributeRouting nuget包。安装此软件包后,每个函数似乎都会引发以下异常:

  

带路由的路由上的约束条目“inboundHttpMethod”   模板'Company'必须具有字符串值或者具有类型的字符串值   实现'IHttpRouteConstraint'。

在此消息中,“Company”是简单返回一个对象的简单GET方法的路由名称。每条路线都会产生此错误消息。堆栈跟踪是:

  

[InvalidOperationException:约束条目'inboundHttpMethod'   在路线模板'公司/ {Id}'的路线上必须有一个字符串   value或是一个实现'IHttpRouteConstraint'的类型。]
  System.Web.Http.Routing.HttpRoute.ProcessConstraint(HttpRequestMessage   请求,对象约束,字符串parameterName,   HttpRouteValueDictionary值,HttpRouteDirection routeDirection)   +346 System.Web.Http.Routing.HttpRoute.ProcessConstraints(HttpRequestMessage)   请求,HttpRouteValueDictionary值,HttpRouteDirection   routeDirection)+201
  System.Web.Http.Routing.HttpRoute.GetRouteData(String virtualPathRoot,   HttpRequestMessage请求)+430
  AttributeRouting.Web.Http.Framework.HttpAttributeRoute.GetRouteData(字符串   virtualPathRoot,HttpRequestMessage request)+250
  System.Web.Http.WebHost.Routing.HttpWebRoute.GetRouteData(HttpContextBase   httpContext)+191
  System.Web.Routing.RouteCollection.GetRouteData(HttpContextBase   httpContext)+233
  System.Web.Routing.UrlRoutingModule.PostResolveRequestCache(HttpContextBase   上下文)+60
  System.Web.Routing.UrlRoutingModule.OnApplicationPostResolveRequestCache(对象   发件人,EventArgs e)+82
  System.Web.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()   +136 System.Web.HttpApplication.ExecuteStep(IExecutionStep step,Boolean& completedSynchronously)+69

我找到了以下描述我的问题的帖子:https://github.com/mccalltd/AttributeRouting/issues/191

不幸的是,此修复似乎没有帮助:https://github.com/mccalltd/AttributeRouting/issues/191#issuecomment-13814025

有关如何解决此问题的任何想法?

1 个答案:

答案 0 :(得分:1)

在你的情况下,我肯定觉得这个问题与内存托管有关,并且你在上面提到的link中有一个解决方案。 在更新到MVC 5之后,我遇到了这个问题并且在link中进行了锻炼,最终帮助了我。 我就是这样做的。

在global.ascx页面中,我有以下内容:

AttributeRoutingHttpConfig.RegisterRoutes(GlobalConfiguration.Configuration.Routes);

AttributeRoutingHttpConfig课程中,我替换了代码

routes.MapHttpAttributeRoutes();

routes.MapHttpAttributeRoutes(cfg =>
{
                cfg.InMemory = true;
                cfg.AutoGenerateRouteNames = true;
                cfg.AddRoutesFromAssemblyOf<Your_API_Controller>();
            });

您可以使用任何ApiController类覆盖Your_API_Controller。 (是的,不知道为什么,但你想要的任何api控制器工作;))

希望这有帮助,