1

Web API プロジェクトで AttributeRouting を使用しています。Web API の AttributeRouting をインストールしました。Enum ルート制約を定義したいので、AttributeRoutingHttpConfig 構成を次のようにセットアップします。

using System.Reflection;
using System.Web.Http;
using AttributeRouting.Web.Http.Constraints;
using AttributeRouting.Web.Http.WebHost;
using MyProject.Data.Models;

[assembly: WebActivator.PreApplicationStartMethod(typeof(PhantasyTour.AttributeRoutingHttpConfig), "Start")]

namespace MyProject
{
    public static class AttributeRoutingHttpConfig
    {
        public static void RegisterRoutes(HttpRouteCollection routes) 
        {    
            routes.MapHttpAttributeRoutes(
                config =>
                {
                    config.AddRoutesFromAssembly(Assembly.GetExecutingAssembly());
                    config.InlineRouteConstraints.Add("ListType", typeof(EnumRouteConstraint<ListType>));
                });
        }

        public static void Start() 
        {
            RegisterRoutes(GlobalConfiguration.Configuration.Routes);
        }
    }
}

アプリケーションを起動すると、すぐに次のエラーが表示されます。

制約 "AttributeRouting.Web.Http.Constraints.EnumRouteConstraint`1[[MyProject.Data.Models.ListType, MyProject.Data, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]" は System.Web を実装する必要があります。 Routing.IRouteConstraint

私は AttributeRouting.Web.Http.Constraints.EnumRouteConstraint のソース コードを見て、おそらく MVC 名前空間の IRouteConstraint に相当する WebAPI である IHttpRouteConstraint を実装していることを確認しました。

私が間違っていることと、これを機能させる方法を誰かが知っていますか?

アップデート:

完全に空の Web アプリケーションを作成し、WebAPI 参照用に WebAPI と AttributeRouting のみを追加しようとしました。MVC アセンブリへの参照がまったくないにもかかわらず、同じエラー メッセージが表示されます。ただし、完全に機能する AttributeRouting.Web.Constraints 名前空間に別の EnumRouteConstraint があることを発見しました。Core AttributeRouting アセンブリにあるため、MVC 固有ではないようです。1つしか機能しないのに、2つの異なる EnumRouteConstraint クラスがある理由を知りたいです。しかし、それはまた別の質問です。

4

1 に答える 1

0

興味深いのは、発生する例外が namespace からの MVC インターフェイスを参照していることですSystem.Web.Routing

私はそれを手がかりとして、プロジェクト内のすべての参照を調べMVC RoutesますHttp Routes

可能であれば、MVC (または最初は System.Web.Routing) へのすべての参照と、属性ルーティングの MVC フレーバー (別の dll の場合) を削除してみてください。

于 2013-05-08T20:53:50.617 に答える