1

このツールを使用して API を定義し、.NET で Web API コードをスキャフォールド アウトしたところです。https://visualstudiogallery.msdn.microsoft.com/cadcb820-762c-4514-9817-884b7558aaa9 ソリューションに一連のコントローラーとコントラクトを作成する RAML コントラクトを追加しました。メタデータ出力を有効にする関数も実行しました。/raml ページに移動すると、素晴らしい API 仕様が表示されます。ただし、すべてのバージョンが 2 つあるため、それを防ぐために何を変更すればよいかわかりません。たとえば、私の .raml ファイルには、"operators" というリソースがあります。ツールを使用して、「OperatorsController」と呼ばれるコントローラーを作成します。.raml 定義ファイルの baseUri はhttp://localhost:51366/api/ です。WebApiConfig.Register 関数の MapHttpRoute は、api/{controller}/{id} の routeTemplate で設定されます。/raml ページには、/bookings のエントリと /api/Bookings のエントリがあります。最初のものは .raml 仕様に由来し、2 番目は作成された BookingsController に由来するようです。 ここに画像の説明を入力

重複を防ぐ方法を教えてください.APIの作成をいじったのは初めてなので、ここで明らかな何かが欠けている可能性があります...

4

1 に答える 1

1

メタデータ (動的に生成された raml) は、すべてのルートをキャプチャします。WebApi は、アクション/コントローラーごとに 2 つの異なるルートを持つように構成されています。それはAPIコンソールに反映されています(質問の写真)。

「RAML コントラクトの追加...」コマンドを使用して作成したコントローラーは、属性ルーティングを使用します (生成されたコントローラーおよびアクションの RoutePrefix および Route 属性)。

また、デフォルト ルート「api/{controller}/{id}」もあります。

WebApiConfig.cs を見ると、次のことがわかります。

config.MapHttpAttributeRoutes();

config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );

たとえば、OpertatorsController / Get は、次の 2 つの異なるルートによって呼び出されます。

/operators (属性を介して構成されたルートを使用)

/api/operators (「DefaultApi」ルートを使用)

「DefaultApi」ルートを削除すると、アクションごとにルートが 1 つしかなくなるため、重複がなくなります。

注: baseUri はメタデータにはまったく使用されません

于 2015-12-11T17:40:46.797 に答える