私はASP.Net Web API Routingについて簡単な質問をしています。私は、次のコントローラいる:基本的な従来のルーティングasp.net webapi
public class CustomersController: ApiController
{
public List<SomeClass> Get(string searchTerm)
{
if(String.IsNullOrEmpty(searchTerm))
{
//return complete List
}
else
{
//return list.where (Customer name contains searchTerm)
}
}
}
私のルーティング設定(従来の)次のようになります。私は、URLをヒットした場合
config.Routes.MapHttpRoute(name:"DefaultApi",
routeTemplate:"api/{controller}/{id}"
defaults:new {id = RouteParameter.Optional});
config.Routes.MapHttpRoute(name:"CustomersApi",
routeTemplate:"api/{controller}/{searchTerm}"
defaults:new {searchTerm = RouteParameter.Optional});
: http://localhost:57169/api/Customers/Vi 私は404-ないの取得は
を見つけました私がルートの順序を逆にすると、それは動作します。 質問が最初のケースでは、最初のルート(DefaultApi)と一致していますか?そうでない場合、なぜ2番目のルートを試していないのですか? string
だからあなたのURLは、このテンプレートを尊重し、このルートが選択されているなどint
、:Id
は任意の型を指定できますので
このルートが選択された場合、なぜコントローラメソッドがトリガされないのですか? Controllerメソッドのパラメータ名がidではなくsearchTermなので、それですか? – Vikas
これは選択されましたが、 "id"をパラメータとするアクションは、得意先コントローラにはありません。アクションが見つからない場合は、404を返します。ASP.Net Web APIは、別のルート・テンプレートを取るためにテンプレートlitstに再び戻されません。 – CodeNotFound
あなたが言っているのは、ルート解決ではパラメータ名を考慮しないということです。最初にルートが選択され、次にパラメータがマッチします。あれは正しいですか? – Vikas