ASP.NET Core: [FromQuery] 用法与URL格式

43

我正尝试在我的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?ID="123"&Name="HarryPotter"

但断点没有命中我的控制器方法,所以我在想也许URL不正确。有什么建议吗?谢谢!

1个回答

52
当你通过像这样的属性显式定义路由时,方法名称和返回类型完全被忽略。 在那里不应该有"IActionResult"。 正确的URL是:https://localhost:xxxxx/api/v1/ShelfID/{shelfID}/BookCollection?ID="123"&Name="HarryPotter" 此外,查询字符串绑定仅针对基元类型(string,int等)开箱即用。 要将类绑定到查询字符串,您需要一个自定义模型绑定器,这相当复杂。 最好只明确声明要传递的属性。
public async Task<IActionResult> GetAllBooks(string shelfID,
                                             [FromQuery] string ID, 
                                             [FromQuery] string Name)

16
您也可以使用[FromQuery]将复杂对象绑定到方法参数中,例如:public async Task<IActionResult> Get([FromQuery] MyFilterModel _filters)。请参考此链接:http://www.tutorialsteacher.com/webapi/parameter-binding-in-web-api。 - Himalaya Garg

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接