FromBody字符串参数返回空值。

91

这可能是非常基础的问题,但我在弄清楚自己做错了什么方面遇到了困难。

我正在尝试从POST请求的正文中获取一个字符串,但是 "jsonString" 只显示为空。我也想避免使用模型,但也许这是不可能的。我在PostMan中使用的代码片段如下:

[Route("Edit/Test")]
[HttpPost]
public void Test(int id, [FromBody] string jsonString)
{
    ...
}
也许我在Postman方面做错了什么,但我一直试图在请求体的x-www-form-urlencoded部分的值区域中使用“=test”(如其他关于此主题的问题所见),并将键设置为jsonString且值为空。我还尝试过使用raw-text和raw-text/plain。我得到了id,所以我知道url是正确的。非常感谢您对此的任何帮助。
当前PostMan的设置如下:
POST http://localhost:8000/Edit/Test?id=111
key = id  value = 111
Body - x-www-form-urlencoded
key = jsonString  value = "=test"

请在您的问题中提供完整的HTTP请求,包括URL和请求体。 - Matt Hensley
至少 Request.Content.ReadAsStringAsync() 应该可以工作。 - Fabio
3
我相信这是可能的。请设置您的请求头 Content-Type: application/x-www-form-urlencoded,并将请求体设置为 =test(没有其他内容)。 - Igor
Asp.Net Core 相关问题 https://dev59.com/KlwZ5IYBdhLWcg3wBcQJ - Michael Freidgeim
你可以通过访问以下链接找到我的答案:https://stackoverflow.com/questions/41559050/string-value-is-empty-when-using-frombody-in-asp-net-web-api/69975991#69975991 - CagriK
显示剩余2条评论
17个回答

2

对于 .net core 3.1,使用 post(url, JSON.stringify(yourVariable)) 在控制器中的 MyMethod([FromBody] string yourVariable) 上运行良好。


1

经过长时间在Google上摸索和尝试Stack Overflow中错误的代码后,我发现将([FromBody] string model)更改为([FromBody] object model)会产生奇妙的效果,请注意我正在使用.NET 4.0,是的,我知道它已经老了,但是...


1
你可以像这样使用“Object”而不是字符串:
public async Task<IActionResult> Method([FromBody] Object plainJson)

然后打印对象:

Console.WriteLine(plainJson.ToString());

就是这样了!


1

这也许会很有用。 我需要将一个JSON字符串传递给我的API控制器。但是模型事先是未知的。使用JObject作为对象类型完美地解决了这个问题。 稍后可以进行序列化以获取字符串。

[FromBody] JObject unknownStringJsonObject

1
尝试下面的代码:

[Route("/test")]
[HttpPost]
public async Task Test()
{
   using (var reader = new StreamReader(Request.Body, Encoding.UTF8))
   {
      var textFromBody = await reader.ReadToEndAsync();                    
   }            
}

0

我遇到了这个问题,非常令人沮丧。我的设置是:header 设置为 Content-Type: application/JSON,并使用 JSON 格式从 body 传递信息,并在控制器上读取 [FromBody]。

一切都设置得很好,我希望它能正常工作,但 JSON 发送的问题出在复杂结构上,其中一个定义为“抽象”的类未被初始化,因此值未正确分配给模型。我删除了 abstract 关键字,然后它就可以工作了..!!!

一个提示,我发现解决方法的方式是将数据分部发送到我的控制器并检查何时变为空...由于我是将一个模型附加到我的请求参数中的复杂模型,所以我一次附加一个模型。希望它能帮助遇到这个愚蠢问题的人。


0
此外,如果您正在使用Postman的“环境”,请确保在运行使用它的API脚本之前选择该环境。否则,它将仅发送变量字符串 - {{varname}} - 而不是其关联的值,这样API会适当地拒绝它们。

我认为你应该将这个作为评论添加,因为它并没有真正回答问题。 - Marius Stănescu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接