ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

c#-调用ASP.NET Core Web API时“ 400 /输入无效”

2019-10-25 03:06:38  阅读:562  来源: 互联网

标签:asp-net-core-webapi postman c


我正在使用邮递员测试我的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 &#x27;----------------------------179455694862693501539465&#x27; 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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有