43

I am trying to use [FromQuery] in my web API and I am not sure how to use it.

Here's the GetAllBooks() method in the controller:

 [HttpGet]
 [Route("api/v1/ShelfID/{shelfID}/BookCollection")]
 public async Task<IActionResult> GetAllBooks(string shelfID, [FromQuery] Book bookinfo)
 {
     //do something
 }

Here's the Book model class:

 public class Book
 {
     public string ID{ get; set; }
     public string Name{ get; set; }
     public string Author { get; set; }
     public string PublishDate { get; set; }
 }

I am confused about whether it is the correct way to use [FromQuery]. I thought the URL is

https://localhost:xxxxx/api/v1/ShelfID/{shelfID}/BookCollection/IActionResult?ID="123"&Name="HarryPotter"

But the break point is not hitting my controller method, so I was thinking maybe the URL is not correct. Any suggestions? Thanks!

1 Answer 1

57

The name of the method and return type are completely ignored when you define your route explicitly via attributes like that. IActionResult shouldn't be there.

The correct URL would be: https://localhost:xxxxx/api/v1/ShelfID/{shelfID}/BookCollection?ID="123"&Name="HarryPotter"

Furthermore, query string binding only works out of the box for primitive types (string, int, etc). To bind a class to a query string you'd need a custom modelbinder, which is quite involved.

It would be better to just explicitly declare the properties you want to pass in:

public async Task<IActionResult> GetAllBooks(string shelfID,
                                             [FromQuery] string ID, 
                                             [FromQuery] string Name)
Sign up to request clarification or add additional context in comments.

1 Comment

You can also use [FromQuery] to bind to complex object e.g. public async Task<IActionResult> Get([FromQuery] MyFilterModel _filters) Refer this link : tutorialsteacher.com/webapi/parameter-binding-in-web-api

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.