【发布时间】:2014-03-02 00:12:01
【问题描述】:
我正在尝试向默认 WebApi 示例添加特殊路由:
常规的是
/api/values(检索所有值)
/api/values/{id}(检索特定值(通过数字 id))
现在我想添加这个 api:
/api/values/special
之前的 api (/api/values/{id}) 应该为所有带有数字 id 的请求提供服务,但 /api/values/special 应该为调用该特定 url 的请求提供服务。
到目前为止,我得到了这个用于路由:
config.Routes.MapHttpRoute("SpecialValues", "api/values/special", new { controller = "values", action = "SpecialValues" });
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
这用于实施:
public class ValuesController : ApiController
{
// GET api/values
public IEnumerable<string> Get()
{
return new string[] { "value1", "value2" };
}
// GET api/values/5
public string Get(int id)
{
return "value";
}
// POST api/values
public void Post([FromBody]string value)
{
}
// PUT api/values/5
public void Put(int id, [FromBody]string value)
{
}
// DELETE api/values/5
public void Delete(int id)
{
}
// GET api/values/special
public IEnumerable<string> SpecialValues()
{
return new string[] { "special1", "special2" };
}
}
但它会呈现:The requested resource does not support http method 'GET'。
如果我调用/api/values/special 并将[HttpGet] 添加到SpecialValues 方法中,它将起作用
但是/api/values 会停止工作,说有多个匹配操作。
【问题讨论】:
标签: c# asp.net-web-api