'ASP.NET Core: [FromQuery] usage and URL format
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!
Solution 1:[1]
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)
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
Solution | Source |
---|---|
Solution 1 | ΩmegaMan |