Web APIで[FromQuery]を使用しようとしていますが、使用方法がわかりません。
コントローラーのGetAllBooks()メソッドは次のとおりです。
[HttpGet]
[Route("api/v1/ShelfID/{shelfID}/BookCollection")]
public async Task<IActionResult> GetAllBooks(string shelfID, [FromQuery] Book bookinfo)
{
//do something
}
Bookモデルクラスは次のとおりです。
public class Book
{
public string ID{ get; set; }
public string Name{ get; set; }
public string Author { get; set; }
public string PublishDate { get; set; }
}
[FromQuery]を使用する正しい方法であるかどうかについて混乱しています。 URLは
https://localhost:xxxxx/api/v1/ShelfID/{shelfID}/BookCollection/IActionResult?ID="123"&Name="HarryPotter"
しかし、ブレークポイントは私のコントローラーメソッドにヒットしていないので、URLが間違っているのではないかと考えていました。助言がありますか?ありがとう!
そのような属性を介してルートを明示的に定義する場合、メソッドの名前と戻り値の型は完全に無視されます。 IActionResult
は存在しないはずです。
正しいURLは次のとおりです。https://localhost:xxxxx/api/v1/ShelfID/{shelfID}/BookCollection?ID="123"&Name="HarryPotter"
さらに、クエリ文字列バインディングは、プリミティブ型(string、intなど)の場合にそのまま使用できます。クラスをクエリ文字列にバインドするには、カスタムmodelbinderが必要です。これは非常に複雑です。
渡すプロパティを明示的に宣言することをお勧めします。
public async Task<IActionResult> GetAllBooks(string shelfID, [FromQuery] string ID, [FromQuery] string Name)