1

私の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」のみを返します。 ?

4

2 に答える 2

0

actionという名前の2つのメソッドがあるため、おそらく混乱しています。それらの1つを削除または名前変更してみて、それが機能するかどうかを確認してください。

于 2012-07-30T16:05:17.057 に答える
0

これを行う 1 つの方法は、パラメーターのデフォルト値を指定することです。

[HttpGet]
public String Active(int id = 0)
{
    var result = new List<string> { "active1", "active2" };

    if (id == 0) {
      return result;
    } else {
      return result[id];
    }
}
于 2012-07-30T16:08:53.420 に答える