路由表现奇怪

时间:2013-11-03 12:35:57

标签: c# .net asp.net-mvc asp.net-mvc-4

我的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”:“参数   字典包含非可空参数'id'的空条目   输入方法'System.String Get(Int32)'的'System.Int32'   myApp.Data.AccountController”。可选参数必须是a   引用类型,可空类型,或声明为可选   参数。“}

似乎所有调用都转到方法Get(int id)。有什么问题?

2 个答案:

答案 0 :(得分:4)

您的路线缺少行动:

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

所以它认为{id}XGetUsers

答案 1 :(得分:1)

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

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