web api调用带有不同url参数的get方法

时间:2016-10-12 19:21:00

标签: c# asp.net asp.net-web-api

我有一套实现get接口的要求:

 - api/Item
 - api/Item?name=test
 - api/Item?updated=2016-10-12
 - etc

我已将方法定义为:

 - get() //returns all items
 - getName([FromUri] string name) 
 - getUpdated([FromUri] string updated)

我的问题是 - 如果参数不存在(假设调用是api/Item?test=test),则调用get()方法,因为找不到“test”参数映射。

在这种情况下,我需要返回错误响应。有没有其他正确的方法从URL读取参数以满足接口要求?

1 个答案:

答案 0 :(得分:2)

您可能正在寻找类似的东西

[RoutePrefix("api/items")]
public class ItemsController : ApiController
{

    public IHttpActionResult Get()
    {
        return Ok(new List<string> { "some results collection" });
    }

    [Route("names")]
    public IHttpActionResult GetByName([FromUri]string name = null)
    {
        if (string.IsNullOrWhiteSpace(name))
        {
            return BadRequest("name is empty");
        }
        return Ok("some result");
    }

    [Route("updates")]
    public IHttpActionResult GetUpdates([FromUri]string updated = null)
    {
        if (string.IsNullOrWhiteSpace(updated))
        {
            return BadRequest("updated is empty");
        }
        return Ok("some result");
    }
}

当您调用这些REST端点时,您的调用将类似于

获取 api / items 以检索所有项目

获取 api / items / names / john 以按名称检索,如果未提供参数,则返回错误

获取 api / items / updated / test 以检索更新,如果未提供参数,则返回错误