我使用.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
有关如何解决此问题的任何想法?
答案 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控制器工作;))
希望这有帮助,