0

をルーティングWebAPIの設定:私はAngularJSサービスからこのアクションのいずれかを呼び出すことを試みたときに私はルートに追加した<code>WebApiConfig</code>で

[HttpGet] 
public async Task<IEnumerable<RequestModel>> Pending(){} 

[HttpGet] 
public async Task<IEnumerable<RequestModel>> Resolved() 

:私は2つのGETアクションを持ってApiControllerで

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

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

500エラーが発生しました。それがうまく機能 -

複数のアクションは、私は私の行動を一致させるだけで第2の経路を去ったとき要求

と一致していることが分かりました。

"/api/v1/RequestRecipient/Pending" 

2つのルートの場合に何が問題になりますか?

+0

「id」にはどのようなタイプがありますか?制約を追加する必要があるかもしれません。なぜなら、表示されたパスは両方のテンプレートに一致するので、idはオプションです – Nkosi

答えて

0

私は解決策を見つけました。ルートの順番を変更するだけです。

から:

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

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

へ:

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

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

しかし、また、私は、これはアクションと非アクションのルートを持っていることは良い考えではないこと、誰かの意見を見つけました。

関連する問題