HTTP将JSON数据和查询字符串值发布到dotNet core 3.0中的Web API

背景

我正在尝试使用dotNet core 3.0实现Web API,以便它可以接受JSON数据的POST版本。

我已经实现了这一点,但是还有一个额外的复杂性:发布JSON数据的系统通过出现在查询字符串上的API密钥提供身份验证。 (实际上-它提供了三个查询字符串值:前两个值的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) 

出现在查询字符串上的身份验证值实际上与模型无关,它们与流程上载的数据无关。因此,它们不应出现在batches列表中或作为MyStuffBatch特定实例的属性。

所以问题是:我如何设计一个控制器,该控制器处理在查询字符串中传递的身份验证API密钥详细信息,同时(假设已传递有效的API密钥等)仍在处理像以前一样JSON有效负载?

jian123789 回答:HTTP将JSON数据和查询字符串值发布到dotNet core 3.0中的Web API

您可以在发布操作中使用[FromQuery]来绑定查询字符串中的参数,例如:

网址:

POST https://localhost:5001/weatherforecast?timestamp=2019-11-06T09:27:36.000Z&apiKey=secretkey

操作:

[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)
本文链接:https://www.f2er.com/3158121.html

大家都在问