c#-调用ASP.NET Core Web API时“ 400 /输入无效”
作者:互联网
我正在使用邮递员测试我的Web API,并在邮递员中返回“ 400错误请求”或“输入无效”.我动作第一行的断点没有被击中.我如何弄清楚幕后发生了什么?
我将显示Postman的屏幕截图,但无法上传图片.这只是一个POST,其中为Body指定了多个字段.这是网址:
http://localhost:52126/api/v1/itinerary
这是动作:
[HttpPost]
[Route("api/v1/itinerary")]
public async Task<ActionResult> AddItineraryAsync([FromBody] Itinerary itinerary)
{
if (!ModelState.IsValid) // Break point on this line not getting hit!
{
return BadRequest(ModelState);
}
await Logic.AddItineraryAsync(itinerary);
return Ok();
}
最初,我没有为此操作指定[FromBody].无论哪种方式都行不通.我可以检查什么,以了解发生了什么事?
澄清(回应克里斯·普拉特):
我正处于编写第一个移动应用程序的初期阶段,作为一个自下而上的家伙,我首先开始使用一些Web API调用.我假设我将JSON从移动应用程序传递到此服务器层.
在此Web API项目中,我没有做任何与防伪令牌有关的事情,因此我认为这些令牌没有作用……除非那是Postman所提供的.
从操作中删除该参数确实会使执行下降到我的断点,因此错误似乎与ASP.NET的绑定尝试有关.
在Postman中进行了一些深入研究之后,我确实看到标题为Content-Type指定了x-www-form-urlencoded.根据您的建议,我将其更改为application / json.但是,这似乎没有什么不同.
更多信息:
在尝试了下面卡尔的建议之后,我获得了更多信息.执行权落到了行动中,我看看邮递员正在传递什么.这里是:
----------------------------179455694862693501539465
Content-Disposition: form-data; name="StartPoint"
Tacoma
----------------------------179455694862693501539465
Content-Disposition: form-data; name="EndPoint"
Portland
----------------------------179455694862693501539465
Content-Disposition: form-data; name="TravelDate"
2018-8-21 07:00:00 AM
----------------------------179455694862693501539465
Content-Disposition: form-data; name="Name"
Test Itinerary
----------------------------179455694862693501539465
Content-Disposition: form-data; name="UserAccountId"
2
----------------------------179455694862693501539465
Content-Disposition: form-data; name="Comment"
Just doin' some testing.
----------------------------179455694862693501539465--
Json反序列化因以下原因而失败:
JsonReaderException: Input string '----------------------------179455694862693501539465' is not a valid number.
这些数字是什么,它们来自哪里?
解决方法:
仅当ModelState能够成功反序列化发布正文/绑定时,才会验证ModelState.
您的问题并不明确,但是听起来好像您是以x-www-form-urlencoded的形式发布的.在这种情况下,您不应该具有[FromBody].但是,请记住,这是一种“或”的情况,因此,如果您最终希望通过JSON发布,则应保留该属性,然后从Postman发布JSON.
除此之外,请确保您没有使用防伪令牌验证,或者要与请求一起发布有效令牌.反伪造验证失败将使请求短路并立即返回400.
如果要发布JSON,请确保JSON有效.如果JSON无效,您将立即得到400.
标签:asp-net-core-webapi,postman,c 来源: https://codeday.me/bug/20191025/1925467.html