2

MVC4 アプリケーションがあり、次のようなテスト webapi ベースのコントローラーを作成しました。

public class User1
    {
        public int Id { get; set; }
        public string name { get; set; }
        public User1(int id, string name)
        {
            this.Id = id;
            this.name = name;
        }
    }

    public class Test1Controller : ApiController
    {
        public User1 Get(int id)
        {
            return new User1(id, "hello");
        }
    }

webapiconfig クラスがあることに気付きました。

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

これはデフォルトでjsonの結果が正しいと思いますか?

私が行くとき:

http://localhost:61146/api/test1/get/1

また

http://localhost:61146/test1/get/1

次のエラーが表示されます。

The resource cannot be found.

これはどのように正確にマップされますか、または特別なフォルダーにドロップする必要がありますか? ApiController から継承しているので、それ自体でマップされると思います

4

1 に答える 1

5

Web API では、Post、Get、Put、Delete という名前は (デフォルトで) アクション名ではなく、リクエスト メソッド名としてマップされます。API ルートは次のとおりです。

api/{controller}/{id}

そしてリクエスト:

api/test1/get/1

apiフレームワークは 4 つのトークンを、3 つのトークン (リテラルと 2 つのトークン:controllerと)を含む唯一の既存のルート定義に一致させようとするため、適切な一致は見つかりませんid

試してみると:

 api/test1/get

フレームワークはTest1Controller正しく検出しますが、ルート構成に基づいて、トークン"get"idパラメーターにバインドします。フレームワークがリクエスト (GET リクエスト) に基づいて適切なメソッドを見つけようとすると、 が見つかり、一致するものが見つかりますが、トークンを整数にGet(int id)変換することはできません。"get"リクエスト。

ただし、このリクエストを試すと:

api/test1/1

トークン"1"を int に変換し1 、メソッドGet(int id)が一致します。

Asp.NET Web API では、ルーティングが混乱することがあります。ルートを明示的にマッピングすると、リクエストをよりよく理解できることがわかりました。Web Api の次のバージョンに統合されるAttributeRoutingをお勧めします。

于 2013-07-08T18:40:48.937 に答える