【问题标题】:Web API throws exception after installing AttributeRouting安装 AttributeRouting 后 Web API 抛出异常
【发布时间】:2013-10-28 15:09:58
【问题描述】:

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

这个项目运行良好,但我决定安装AttributeRouting nuget 包。安装此软件包后,每个功能似乎都会引发以下异常:

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

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

[InvalidOperationException:约束条目'inboundHttpMethod' 在带有路由模板“Company/{Id}”的路由上必须有一个字符串 值或属于实现“IHttpRouteConstraint”的类型。]
System.Web.Http.Routing.HttpRoute.ProcessConstraint(HttpRequestMessage 请求,对象约束,字符串参数名称, HttpRouteValueDictionary 值,HttpRouteDirection routeDirection) +346 System.Web.Http.Routing.HttpRoute.ProcessConstraints(HttpRequestMessage 请求,HttpRouteValueDictionary 值,HttpRouteDirection 路线方向)+201
System.Web.Http.Routing.HttpRoute.GetRouteData(字符串 virtualPathRoot, HttpRequestMessage 请求)+430
AttributeRouting.Web.Http.Framework.HttpAttributeRoute.GetRouteData(字符串 virtualPathRoot,HttpRequestMessage 请求)+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

关于如何解决这个问题的任何想法?

【问题讨论】:

    标签: invalidoperationexception attributerouting


    【解决方案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 控制器都可以工作;))

    希望这会有所帮助,

    【讨论】:

    • 这对我有帮助,谢谢。当您更改主机或将应用程序推送到生产服务器时,您是否必须更改此设置?
    猜你喜欢
    • 2011-01-11
    • 1970-01-01
    • 2013-01-02
    • 2015-04-15
    • 2016-06-11
    • 2015-02-19
    • 1970-01-01
    • 1970-01-01
    • 2014-05-15
    相关资源
    最近更新 更多