0

私はこのようなコントローラーを持っています

    [HttpGet]
    [ActionName("Ping")]
    public bool Ping() { return true; }

    [HttpPost]
    [ActionName("Test")]
    public string Test([FromBody] Testing form) 
    { 
       return form.Email + " " + form.Password; 
    }

ヘルプページを実行すると、次のように表示されます。

GET API/テスト
POST API/テスト

ルーティングはテンプレートに付属するデフォルトのものであるため、注釈「ActionName」を配置した後でも正しい名前が選択されない理由がわかりません。

どんな助けでも本当に感謝します。

================================================== ===============
ANSWER: David L. が示唆したように、問題はルーティングでした。彼が提案したリンクを読み、「ACTION」を含む新しいルーティング API を追加したところ、次のようになりました。

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

これにより、適切なアノテーション名を使用して適切な API が表示されるようになりました。

4

1 に答える 1

1

ActionName は System.Web.Mvc 名前空間の一部です。ほとんどの場合、WebAPI によって無視されます。WebAPI は、何よりもまず Get および Post タグを優先します。

ASP.NET MVC に精通している場合、Web API ルーティングは MVC ルーティングに非常に似ています。主な違いは、Web API が URI パスではなく HTTP メソッドを使用してアクションを選択することです。Web API で MVC スタイルのルーティングを使用することもできます。この記事は、ASP.NET MVC の知識を前提としていません。

WebAPI ルーティングと上記の引用の詳細については、http ://www.asp.net/web-api/overview/web-api-routing-and-actions/routing-in-aspnet-web を参照してください。 -api

編集:

ヘルプ ページが伝えようとしている内容を強調するために、api は公開された API のルートです。テストはコントローラーのルートです。その時点で常に R​​EST 動詞 (この場合は GET および POST) を識別しようとしますが、これが表示されます。

于 2013-10-15T21:55:40.153 に答える