web-dev-qa-db-ja.com

ASP.NET Core:[FromQuery]の使用法とURL形式

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が間違っているのではないかと考えていました。助言がありますか?ありがとう!

10
superninja

そのような属性を介してルートを明示的に定義する場合、メソッドの名前と戻り値の型は完全に無視されます。 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)
15
Fred Kleuver