我对MVC很熟悉,但对WebAPI来说还是比较新的,我遇到了一个令人困惑的问题。
我有一个名为“DummyController”的控制器(继承自ApiController),它有5个默认的搭建方法,包括get,post,put和delete(2 for get),我在底部添加了自己的方法名为“FindDummyObjects()”,我用[HttpGet]属性修饰。
当我导航到“api / dummy”或“api / dummy / get”时,我得到2个字符串对象(“value1”和“value2”)的默认结果。 但是,当我导航到“api / dummy / FindDummyObjects”时,它会抱怨“参数字典包含参数'id'的空条目”。
这意味着它根本没有指向我的Action(因为它是无参数的),所以它可能指向默认的“Get(int id)”动作。
当我评论除了我自己以外的所有动作时,我得到了我期望的结果。
所以我的问题是,使用WebAPI,每个http动词只能有一个动作和一组参数,无论动作名称是否不同?
例如,似乎我不可能在单个控制器中执行10个不同的http GET操作,除非它们都有不同的参数并使用操作名称“Get”(除非我做一些自定义路由我假设)。
这是对的吗?
代码: // GET api / dummy public IEnumerable Get() { return new string [] {“value1”,“value2”}; }
// GET api/dummy/5
public string Get(int id)
{
return "value";
}
// POST api/dummy
public void Post([FromBody]string value)
{
}
// PUT api/dummy/5
public void Put(int id, [FromBody]string value)
{
}
// DELETE api/dummy/5
public void Delete(int id)
{
}
[HttpGet]
public IEnumerable<Models.DummyObject> FindDummyObjects()
{
IList<Models.DummyObject> myDummyList = new List<Models.DummyObject>();
for (int i = 0; i < 10; i++)
{
Models.DummyObject dumObj = new Models.DummyObject();
dumObj.ObjectId = i;
dumObj.ObjectName = string.Empty;
myDummyList.Add(dumObj);
}
return myDummyList;
}
答案 0 :(得分:1)
Web API路由有很多漏洞(我很有礼貌),你碰巧遇到了一个漏洞。这是他们在Web API2中引入属性路由的原因之一。你可能想尝试一下,因为它更灵活一点。