HTTP将JSON数据和查询字符串值发布到dotNet core 3.0中的web API
背景: 我正在尝试使用dotNet core 3.0实现一个web API,以便它能够接受JSON数据的POST-ed有效负载 我已经做到了这一点,但还有一个额外的复杂性:发布JSON数据的系统通过出现在查询字符串上的API密钥提供身份验证。(实际上,它提供了3个查询字符串值:前两个值的api密钥、时间戳和基于共享密钥的MAC哈希。) (我宁愿它作为X-Api-Key值出现在HTTP头中,因为我以前已经通过这个方法实现了安全性——但我没有选择) JSON数据实际上是相同类型的对象列表,因此控制器方法上的绑定如下所示:HTTP将JSON数据和查询字符串值发布到dotNet core 3.0中的web API,json,asp.net-core-webapi,model-binding,Json,Asp.net Core Webapi,Model Binding,背景: 我正在尝试使用dotNet core 3.0实现一个web API,以便它能够接受JSON数据的POST-ed有效负载 我已经做到了这一点,但还有一个额外的复杂性:发布JSON数据的系统通过出现在查询字符串上的API密钥提供身份验证。(实际上,它提供了3个查询字符串值:前两个值的api密钥、时间戳和基于共享密钥的MAC哈希。) (我宁愿它作为X-Api-Key值出现在HTTP头中,因为我以前已经通过这个方法实现了安全性——但我没有选择) JSON数据实际上是相同类型的对象列表,因此控制器
[HttpPost]
[ProducesResponseType(StatusCodes.Status201Created)]
[ProducesResponseType(StatusCodes.Status400BadRequest)]
[ProducesResponseType(StatusCodes.Status401Unauthorized)]
[ProducesResponseType(StatusCodes.Status500InternalServerError)]
public IActionResult AddMyStuffBatches(List<MyStuffBatch> batches)
[HttpPost]
[产品响应类型(StatusCodes.Status201Created)]
[产品响应类型(StatusCodes.Status400BadRequest)]
[产品响应类型(StatusCodes.Status401Unauthorized)]
[产品响应类型(StatusCodes.Status500InternalServerError)]
公共IActionResult AddMyStuffBatches(列出批次)
查询字符串上显示的身份验证值实际上与模型无关——它们与流程上载的数据无关。因此,它们不应出现在batches
列表中或作为MyStuffBatch
的特定实例的属性
所以问题是:我如何设计一个控制器来处理在查询字符串上传递的身份验证API密钥细节,同时(假设传递了有效的API密钥等)仍然像以前一样处理JSON负载?您可以在post操作中使用
[FromQuery]
从查询字符串绑定参数,例如:
网址:
行动:
[HttpPost]
[ProducesResponseType(StatusCodes.Status201Created)]
[ProducesResponseType(StatusCodes.Status400BadRequest)]
[ProducesResponseType(StatusCodes.Status401Unauthorized)]
[ProducesResponseType(StatusCodes.Status500InternalServerError)]
public IActionResult AddMyStuffBatches(List<MyStuffBatch> batches,[FromQuery] string timestamp, [FromQuery] string apiKey)
[HttpPost]
[产品响应类型(StatusCodes.Status201Created)]
[产品响应类型(StatusCodes.Status400BadRequest)]
[产品响应类型(StatusCodes.Status401Unauthorized)]
[产品响应类型(StatusCodes.Status500InternalServerError)]
public IActionResult AddMyStuffBatches(列出批次,[FromQuery]字符串时间戳,[FromQuery]字符串apiKey)
这似乎有效!谢谢当我用[ApiController]
注释控制器类时,我没有意识到我可以使用类似[FromQuery]
的注释。
[HttpPost]
[ProducesResponseType(StatusCodes.Status201Created)]
[ProducesResponseType(StatusCodes.Status400BadRequest)]
[ProducesResponseType(StatusCodes.Status401Unauthorized)]
[ProducesResponseType(StatusCodes.Status500InternalServerError)]
public IActionResult AddMyStuffBatches(List<MyStuffBatch> batches,[FromQuery] string timestamp, [FromQuery] string apiKey)