路由表现异常

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.Int32'的参数'id'的空条目,用于'myApp.Data.AccountController'中的方法'System.String Get(Int32)'。可选参数必须是引用类型、可为空类型或声明为可选参数。"}
似乎所有的调用都进入了Get(int id)方法。出了什么问题?
2个回答

4
您的路由缺少操作:
routeTemplate: "api/{controller}/{action}/{id}",

所以它认为{id}XGetUsers


@OldGeezer,不用担心,我很高兴能够帮助你! - Mike Perrenoud

1
你似乎只定义了一种可能性: 控制器后面的部分是一个id。只有一个动作匹配它,因此该动作是唯一可以被调用的候选者。
也许你还想添加一个 "api/{controller}/{action}/{id}" 来匹配其他候选项。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接