我已经创建了一个现成的.NET Core 2.2解决方案并运行它。如:
这为我提供了默认ValuesController类中的POST处理代码:
// POST api/values
[HttpPost]
public void Post([FromBody] string value)
{
}
通过邮递员,我发布
{
"foo": "bar"
}
并接收
解析值:时遇到意外字符。路径”,第1行,位置1。
甚至在到达“我的”(开箱即用)代码之前,都会发生错误。我看到了许多有关序列化的参考,但这是在我有机会接触有效负载之前发生的。
缺少什么(可能非常简单)配置?
答案 0 :(得分:17)
要在Postman中达到默认终点,请在正文中添加以下内容
"foo"
要使用以下
{
"foo": "bar"
}
您将需要一个类似这样的课程
public class MyClass
{
public string Foo { get; set; }
}
然后将帖子更改为
// POST api/values
[HttpPost]
public void Post([FromBody] MyClass value)
{
}
希望有帮助
答案 1 :(得分:3)
.net内核默认情况下使用命名约定进行绑定。您的问题在于,作为JSON传递的内容与action方法接收的值不匹配。将参数名称更改为foo
,它应该可以工作
// POST api/values
[HttpPost]
public void Post([FromBody] string foo)
{
}
现在使用.net core 3.1,默认的序列化程序不是Newtonsoft,现在传递这样的字符串
{
"foo": "bar"
}
当您将字符串用作FromBody属性的参数时,将给您一个解析错误。开发人员倾向于将内容包装在类中,因此在这种情况下,绑定可以很好地工作。另一种方法是将对象作为参数传递,但是您需要在action方法内部反序列化该对象,而不是.net core为您进行绑定。
// POST api/values
[HttpPost]
public void Post([FromBody] object foo)
{
//deserialize the object into your class or if it is a string. call foo.ToStrig() and get the value you need from there
}
希望这会有所帮助