3

WebAPI プロジェクトの AttributeRouting を (v3.x から) 最新バージョンに更新したところ、今まで見たことのないエラーが発生し始めました。

API が呼び出されるたびに、次のようなエラーが表示されます。

System.InvalidOperationException: The constraint entry 'inboundHttpMethod' on the route with route template 'my/path' must have a string value or be of a type which implements 'IHttpRouteConstraint'.
   at System.Web.Http.Routing.HttpRoute.ProcessConstraint(HttpRequestMessage request, Object constraint, String parameterName, HttpRouteValueDictionary values, HttpRouteDirection routeDirection)
   at System.Web.Http.Routing.HttpRoute.ProcessConstraints(HttpRequestMessage request, HttpRouteValueDictionary values, HttpRouteDirection routeDirection)
   at System.Web.Http.Routing.HttpRoute.GetRouteData(String virtualPathRoot, HttpRequestMessage request)
   at AttributeRouting.Web.Http.Framework.HttpAttributeRoute.GetRouteData(String virtualPathRoot, HttpRequestMessage request)
   at System.Web.Http.WebHost.Routing.HttpWebRoute.GetRouteData(HttpContextBase httpContext)
   at System.Web.Routing.RouteCollection.GetRouteData(HttpContextBase httpContext)
   at System.Web.Routing.UrlRoutingModule.PostResolveRequestCache(HttpContextBase context)
   at System.Web.Routing.UrlRoutingModule.OnApplicationPostResolveRequestCache(Object sender, EventArgs e)
   at System.Web.HttpApplication.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
   at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)

何ヶ月も問題なく動作しています。

ドキュメントの詳細以外には、使用方法の変更があります。私の設定ファイルは正しいようです。

何がうまくいかなかったのですか?これを報告している他の人を見つけることができません。

4

1 に答える 1

5

間違いなくメモリホスティングタイプの問題です。最近、MVC 5 にアップデートした後、同じ問題に遭遇しました。さまざまな投稿を調べたところ、最終的に助けになった投稿が実際に見つかりました。これが私がこれを解決した方法です。

属性ルーティング用のライブラリをインストールしたら、global.ascx ファイルに次のものが必要です。

AttributeRoutingHttpConfig.RegisterRoutes(GlobalConfiguration.Configuration.Routes);

AttributeRoutingHttpConfig クラスで、次のコードを置き換えます。

routes.MapHttpAttributeRoutes();

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

ここで、ANY_API_Controller は、プロジェクトの任意の apicontroller クラスを参照します。

于 2013-11-13T17:08:31.717 に答える