【问题标题】:Routing behaving weirdly路由行为怪异
【发布时间】:2013-11-14 04:52:18
【问题描述】:

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

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

【问题讨论】:

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


    【解决方案1】:

    您的路线缺少操作:

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

    所以它认为{id}XGetUsers

    【讨论】:

    • @OldGeezer,别担心,我很高兴能为您提供帮助!
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2013-11-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-23
      • 2017-09-01
      • 2016-09-25
      • 2017-08-06
      相关资源
      最近更新 更多