1

複数の 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 メソッドにマップされるように指定するにはどうすればよいですか?

4

2 に答える 2

2

これらのルートをハードコーディングできますか? もしそうなら、これに似たものがうまくいくはずです。

config.Routes.MapHttpRoute(
    name: "CompanyByNameRoute",
    routeTemplate: "api/Search/CompanyByName/{name},
    defaults: new { controller = "Search", action = "CompanyByName", name = RouteParameter.Optional }
    );
于 2013-10-01T12:12:25.330 に答える
2

最初のルートに制約を追加して、{id} パラメータの数字のみに一致するようにすることができます。

config.Routes.MapHttpRoute(
    name: "ActionById",
    routeTemplate: "api/Search/{action}/{id}",
    defaults: new { controller = "Search", id = RouteParameter.Optional },
    constraints: new { id = @"\d+" }
);

または、2 番目のルートを完全に削除し、アクション シグネチャを変更して {id} パラメータのみを使用することもできます。

[HttpGet]
public IEnumerable<Object> CompanyByOrderId(long id) { ... }
[HttpGet]
public IEnumerable<Object> CompanyByName(string id) { ... }
[HttpGet]
public IEnumerable<Object> UserByName(string id) { ... }
于 2013-10-08T10:53:19.807 に答える