3

Asp.Net Web API で特定のルートにクエリ文字列を要求するにはどうすればよいですか?

コントローラー:

public class AppleController : ApiController
{
    public string Get() { return "hello"; }
    public string GetString(string x) { return "hello " + x; }
}

public class BananaController : ApiController
{
    public string Get() { return "goodbye"; }
    public string GetInt(int y) { return "goodbye number " + y; }
}

希望ルート:

/apple        --> AppleController  --> Get()
/apple?x=foo  --> AppleController  --> Get(x)
/banana       --> BananaController --> Get()
/banana?y=123 --> BananaController --> Get(y)
4

3 に答える 3

3

次のようなことをしてください。

public string Get(int y = -1)
{ 
    if(y < 0) return "goodbye"; 
    return "goodbye number " + y; 
}

そうすれば、それは1つのルートであり、すべてのケースをカバーします。わかりやすくするために、それぞれをプライベートメソッドとして除外することもできます。

もう1つの方法は、ルートを追加することですが、これらはやや具体的であるため、ルートを追加する必要があります。簡単にするために、メソッドGetStringGetInt同じものに変更するとします(たとえばGetFromId、ルートを再利用できるようにします。

routes.MapRoute(
    name: "GetFromIdRoutes",
    url: "{controller}/{id}",
    defaults: new { action = "GetFromId" }
);

routes.MapRoute(
    name: "GetRoutes",
    url: "{controller}",
    defaults: new { action = "Get" }
);

これらを十分に一般化しないと、多くのルートエントリが作成される可能性があります。別のアイデアは、ルートの競合を回避するためにこれらをエリアに配置することです。

于 2012-09-12T19:15:47.677 に答える
0

ルート内のクエリ文字列は、オプションまたは非オプション(Global.asax内)として指定できます。

    ' MapRoute takes the following parameters, in order:
    ' (1) Pages
    ' (2) ID of page
    ' (3) Title of page
    routes.MapRoute( _
        "Pages", _
        "Pages/{id}/{title}", _
        New With {.controller = "Home", .action = "Pages", .id = UrlParameter.Optional, .title = UrlParameter.Optional} _
    )

これはVB.NETです。

于 2012-09-12T19:15:11.173 に答える
0

今朝も同様の質問がありましたが、ルートを構成するためのより簡単な方法を見つけたと思います。あなたの場合、これを使用します:

config.Routes.MapHttpRoute(
    name: "AppleRoute",
    routeTemplate: "apple",
    defaults: new { controller = "Apple" }
);

config.Routes.MapHttpRoute(
    name: "BananaRoute",
    routeTemplate: "banana",
    defaults: new { controller = "Banana" }
);

コントローラーを指定するだけで、クエリ文字列パラメーターが存在するかどうかに基づいて、フレームワークが正しいアクションを選択します。

于 2013-02-07T08:20:06.230 に答える