Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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?

like image 990
Andrei Avatar asked Jan 01 '26 19:01

Andrei


1 Answers

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

like image 144
Vinod Avatar answered Jan 03 '26 12:01

Vinod



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!