Web API调用get方法与不同的url参数

本文关键字:url 参数 API 调用 get 方法 Web | 更新日期: 2023-09-27 18:12:43

我有一组实现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()方法被称为"测试"参数映射没有找到。

在这种情况下,我需要返回错误响应。是否有其他合适的方式从URL中读取参数以满足接口要求?

Web API调用get方法与不同的url参数

您可能正在寻找这样的内容

[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端点时,您的REST api调用将看起来像

GET api/items检索所有项目

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

GET api/items/updated/test检索更新,如果没有提供参数,返回错误