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 错误:

{"Message":"请求无效。","MessageDetail":"参数字典包含方法 'System.String Get(Int32) 的不可空类型 'System.Int32' 的参数 'id' 的空条目'在 myApp.Data.AccountController' 中。可选参数必须是引用类型、可空类型或声明为可选参数。"}

似乎所有调用都转到方法 Get(int id)。怎么了?

4

2 回答 2

4

您的路线缺少操作:

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

所以它是这么想{id}XGetUsers

于 2013-11-03T12:43:29.457 回答
1

您似乎只定义了一种可能性:控制器之后的部分是 id。只有一个动作与之匹配,因此该动作是唯一被调用的候选者。

也许您还想添加一个"api/{controller}/{action}/{id}"以匹配您的其他候选人。

于 2013-11-03T12:44:08.113 回答