複数の get メソッドを使用して別の検索コントローラーを作成したため、既定のルートを変更する必要がありました。
SearchController.cs
[HttpGet]
public IEnumerable<Object> CompanyByOrderId(long id) { ... }
[HttpGet]
public IEnumerable<Object> CompanyByName(string name) { ... }
[HttpGet]
public IEnumerable<Object> UserByName(string name) { ... }
WebApiConfig.cs
public static void Register(HttpConfiguration config)
{
config.Routes.MapHttpRoute(
name: "ActionById",
routeTemplate: "api/Search/{action}/{id}",
defaults: new { controller = "Search", id = RouteParameter.Optional }
);
config.Routes.MapHttpRoute(
name: "ActionByName",
routeTemplate: "api/Search/{action}/{name}",
defaults: new { controller = "Search", name = RouteParameter.Optional }
);
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
を参照するとhttp://localhost:52498/api/Search/CompanyByOrderId/1
うまくいきます。ただし、パラメーターとして名前を指定して他のメソッドのいずれかを呼び出すと、404 エラーが発生します。例えばhttp://localhost:52498/api/Search/UserByName/john
文字列パラメーターを持つ URI が CompanyByName / UserByName メソッドにマップされるように指定するにはどうすればよいですか?