3

私の WebApiConfig.cs

public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );
        config.EnableQuerySupport();
    }
}

私のコントローラーファイルは次のとおりです。

namespace myApp.Data
{
  public class AccountController : ApiController
  {
    public List<User> XGetUsers()
    {
        List<User> Users;
        using (Entities db = new Entities())
        {
            var users = from u in db.Users select u;
            Users = users.ToList();
        }
        return Users;
    }

    // GET api/<controller>/5
    public string Get(int id)
    {
        return "value";
    }
  }
}

しかし、localhost:51255/api/Account/XGetUsers を呼び出そうとすると、常に 400 エラーが発生します。

{"メッセージ":"要求が無効です。","MessageDetail":"パラメーター ディクショナリには、メソッド 'System.String Get(Int32) の null 非許容型 'System.Int32' のパラメーター 'id' の null エントリが含まれています。 ' in myApp.Data.AccountController'. オプションのパラメーターは、参照型または null 許容型であるか、オプションのパラメーターとして宣言する必要があります。"}

すべての呼び出しがメソッド Get(int id) に送られているようです。なにが問題ですか?

4

2 に答える 2

4

ルートにアクションがありません:

routeTemplate: "api/{controller}/{action}/{id}",

だと思ってい{id}ましたXGetUsers

于 2013-11-03T12:43:29.457 に答える
1

あなたは1つの可能性しか定義していないようです:コントローラーの後の部分がidであること。それに一致するアクションは 1 つしかないため、そのアクションが呼び出される唯一の候補です。

おそらく"api/{controller}/{action}/{id}"、他の候補と一致するように を追加することもできます。

于 2013-11-03T12:44:08.113 に答える