web-dev-qa-db-fra.com

ASP.NET Core: utilisation [FromQuery] et format d'URL

J'essaie d'utiliser [FromQuery] dans mon API Web et je ne sais pas comment l'utiliser.

Voici la méthode GetAllBooks () dans le contrôleur:

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

Voici la classe modèle Book:

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

Je suis confus quant à savoir si c'est la bonne façon d'utiliser [FromQuery]. Je pensais que l'URL est

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

Mais le point de rupture ne frappe pas ma méthode de contrôleur, alors je pensais que l'URL n'est peut-être pas correcte. Aucune suggestion? Merci!

10
superninja

Le nom de la méthode et le type de retour sont complètement ignorés lorsque vous définissez explicitement votre route via de tels attributs. IActionResult ne devrait pas être là.

L'URL correcte serait: https://localhost:xxxxx/api/v1/ShelfID/{shelfID}/BookCollection?ID="123"&Name="HarryPotter"

En outre, la liaison de chaîne de requête fonctionne uniquement avec les types primitifs (chaîne, int, etc.). Pour lier une classe à une chaîne de requête, vous avez besoin d'un classeur de modèle personnalisé, ce qui est très complexe.

Il serait préférable de simplement déclarer explicitement les propriétés que vous souhaitez transmettre:

public async Task<IActionResult> GetAllBooks(string shelfID, [FromQuery] string ID, [FromQuery] string Name)
15
Fred Kleuver