私のTestController
中で私は次のものを持っています:
[HttpGet]
public IEnumerable<String> Active()
{
var result = new List<string> { "active1", "active2" };
return result;
}
[HttpGet]
public String Active(int id)
{
var result = new List<string> { "active1", "active2" };
return result[id];
}
RouteConfig
マッピングは次のとおりです。
routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
routes.MapHttpRoute(
name: "ActionApi",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { action = "", id = RouteParameter.Optional });
ブラウザでは、次のリクエストが機能します。
api/test/active/1
しかし、これはInternal Server Errorを返します:
api/test/active
デフォルトの Get と同様の方法で、パラメーターを持っている場合と持っていない場合があるアクションを返すには、どうすればよいでしょうか?
更新 1 Cuong Le が示唆したように、ルートの順序を変更することが役に立ちました。ルートは次のようになりました。
routes.MapHttpRoute(
name: "ActionApi",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional }
);
routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
action = ""
ActionApi ルートから削除する必要がありました。そうしないと、他のコントローラーの標準の Get が機能しなくなりました (つまり、api/values)。
api/test/active は現在解決中ですが、/api/test で 500 Internal Server Error が発生します。両方の解決が可能であるため、api/test は「all」を返し、/test/active は「some」のみを返します。 ?