Andrei
Andrei

Reputation: 119

web api call get method with different url parameters

I have a set of requirements to implement the get interface:

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

I've defined the methods as:

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

My issue is - if parameter doesn't exist (let's say the call was api/Item?test=test), the get() method is called as "test" parameter mapping is not found.

I need to return the error response in this case. Is there any other proper way to read the parameters from URL to meet the interface requirement?

Upvotes: 3

Views: 27667

Answers (1)

Vinod
Vinod

Reputation: 1952

You may be looking for something like this

[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");
    }
}

When you invoke these REST endpoints, your REST api calls will look something like

GET api/items to retrieve all items

GET api/items/names/john to retrieve by name, if parameter is not supplied, error is returned

GET api/items/updated/test to retrieve updates, if parameter is not supplied, error is returned

Upvotes: 8

Related Questions