ASP.NET Web Api HttpClient.GetAsync with parameters

29,537

You cannot send a message body for HTTP GET requests and for that reason, you cannot do the same using HttpClient. However, you can use the URI path and the query string in the request message to pass data. For example, you can have a URI like api/groups/12345?firstname=bill&lastname=Lloyd and the parameter class MyRequest like this.

public class MyRequest
{
    public int Id { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
}

Since MyRequest is a complex type, you have to specify model binding like this.

public HttpResponseMessage GetGroups([FromUri]MyRequest myRequest)

Now, the MyRequest parameter will contain the values from the URI path and the query string. In this case, Id will be 12345, FirstName will be bill and LastName will be Lloyd.

Share:
29,537
Null Reference
Author by

Null Reference

N.A

Updated on July 09, 2022

Comments

  • Null Reference
    Null Reference almost 2 years

    I have the following Web Api method signature

    public HttpResponseMessage GetGroups(MyRequest myRequest)
    

    In the client, how do I pass MyRequest to the calling method?

    Currently, I have something like this

                    var request = new MyRequest()
                        {
                            RequestId = Guid.NewGuid().ToString()
                        };
    
                    var response = client.GetAsync("api/groups").Result;
    

    How can I pass request to GetAsync?

    If it's a POST method, I can do something like this

    var response = client.PostAsJsonAsync("api/groups", request).Result;