8

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;

1 Answer 1

15

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.

Sign up to request clarification or add additional context in comments.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.