I'm trying to call an API from a Windows Service. The API is written in ASP MVC. So far, I am creating requests something like this:
private List<T> GetCollectionFromApi<T>(string url)
{
List<T> result = new List<T>();
try
{
var request = (HttpWebRequest) WebRequest.Create(url);
request.Method = "GET";
using (var response = (HttpWebResponse) request.GetResponse())
{
using (var stream = response.GetResponseStream())
{
using (var sr = new StreamReader(stream))
{
result.AddRange(JsonConvert.DeserializeObject<List<T>>(sr.ReadToEnd()));
}
}
}
}
catch (Exception e)
{
// handle err
}
return result;
}
This is all fine, but now I need to pass a parameter with my GET request. That parameter is an object, not a primitive type.
Do I deconstruct it, property by property, in a query string? Or do I add it to request header somehow? I do plan on relying on DefaultModelBinder in API's controller. Any plan would be appreciated.
API Side:
You need to use [FromUri]
attribute in your API action.
For more information about parameter binding please review this link.
public class SomeData
{
public int Start { get; set; }
public int End { get; set; }
}
public SomeController : ApiController
{
public HttpResponseMessage Get([FromUri] SomeData data) { ... }
}
Client Side
You need send your parameters in query as usual.
http://localhost/api/Some?Start=0&End=10
Also one more interesting link for details is here.