10

パラメーターを取る (データセットではなくスカラー値を返す) GET RESTful メソッドの通常の例は、次のように示されています。

public string Get(int id)
{
    //get and return the value
}

...渡される val は通常 ID であるため、それを使用してその一意の値に基づいてスカラー値を取得できます。

では、string と int など、複数の値を渡したい場合はどうすればよいでしょうか? 次のようにメソッドを定義するだけの問題ですか?

public string Get(string someString, int someInt)
{
    //get and return the value
}

...そしてそれを次のように呼び出します:

//const string uri = "http://192.112.183.42:80/api/platypusItems/someString/someInt";, zB:
const string uri = "http://192.112.183.42:80/api/platypusItems/DuckbilledPlatypisAreGuysToo/42";
var webRequest = (HttpWebRequest) WebRequest.Create(uri);

?

IOW、ルーティング メカニズムは、2 つの引数が渡されるため、2 つの引数を使用して Get() メソッドを呼び出す必要があることを理解しますか (「構成よりも規則」)、または物事を適切にルーティングするためにさらに実行する必要がありますか?

4

1 に答える 1

19

Web API 2 を使用する場合、属性ルーティングを使用して、次のようなリクエストをルーティングできます。http://192.112.183.42:80/api/platypusItems/DuckbilledPlatypisAreGuysToo/42

public class ItemsController : ApiController
{ 
    [Route("api/{controller}/{id}")]
    public string GetItemById(int id)
    {
         // Find item here ...

         return item.ToString();
    }

    [Route("api/{controller}/{name}/{id}")]
    public string GetItemByNameAndId(string name, int id)
    {
         // Find item here ...

         return item.ToString();
    }

}

http://192.112.183.42:80/api/platypusItems/DuckbilledPlatypisAreGuysToo/42にマッピングされGetItemByNameAndIdますhttp://192.112.183.42:80/api/platypusItems/42が、 にマッピングされGetItemByIdます。

次のように、構成で属性ルーティングを有効にする必要があることに注意してください。

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

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

ただし、通常は、引数を追加のパラメーターとして渡す必要があります。GET リクエストでは特に簡単です。これは Web API 1&2 で機能します。

public class ItemsController : ApiController
{
    public string GetItemById(int id)
    {
         // Find item here ...

         return item.ToString();
    }

    public string GetItemByNameAndId(string name, int id)
    {
         // Find item here ...

         return item.ToString();
    }
}

デフォルトのマッピング構成があると仮定すると、Web API は に 1 つではなく 2 つのパラメーターをマップできるため、http://192.112.183.42:80/api/platypusItems/42は にマップされGetItemByIdhttp://192.112.183.42:80/api/platypusItems/42?name=DuckbilledPlatypisAreGuysTooは にマップされます。GetItemByNameAndIdGetItemById

詳細については、属性ルーティングルーティングとアクションの選択Web API でのルーティングに関する Mike Wasson の記事を参照してください。

于 2013-11-10T15:53:09.737 に答える