4

Web API ヘルプ ページに、同じメソッドを参照する次のような異なる親を持つエントリが繰り返し表示されます。

GET api/{apiVersion}/v1/Products - すべての製品を取得します

...

GET api/v1/Products - すべての製品を取得します

...

次のようなルーティングを含む Web API ページがあります。

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

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

このルーティングにより「v1」がオプションになると思っていたので、上記の派生ドキュメントは想定されていません。

(サイドバー: に行くことapi/productsは確かに機能しないので、これの何が問題なのかわかりません。何が欠けているのでしょうか?)

本当の問題は、私が思ったように Web API ヘルプ ページがルートを正しく読み取っていないことでv1あり{apiVersion} 、両方が同じアクションに表示されるべきではないようです。 ここで何が欠けていますか?

4

2 に答える 2

6

属性ルーティングを使用してみて、nuget パッケージをインストールしてください

Install-Package Microsoft.AspNet.WebApi.WebHost

WebApiConfig.cs で属性ルーティングを有効にする

public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        // Attribute routing.
        config.MapHttpAttributeRoutes();

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

次に、コントローラーのメソッドで属性 Route を使用します

[Route("~/api/v1/Products")]
[HttpGet]
public List<Product> Products()
{}

[Route("~/api/v2/Products")]
[HttpGet]
public List<Product> V2Products()
{}

あなたが得るドキュメントで

GET api/v1/Products - すべての製品を取得します

GET api/v2/Products - すべての製品を取得します

于 2015-03-12T11:30:28.940 に答える
2

これは、ASP.NET Web API ヘルプ ページの欠点のようです。回避策として、レンダリングされたドキュメントからこれらの無効なルートを除外するようにビューを変更しました。上記の例では、この Where 句をApiGroup.cshtmlのループに追加して、

@foreach (var api in Model){

@foreach (var api in Model.Where(m => !m.Route.RouteTemplate.Contains(@"{apiVersion}"))){
于 2015-03-30T18:09:50.490 に答える