我有一个简单的HTTP POST请求,我将它发送到一个与Kestrellocalhost运行的ASP Core 2应用程序。接收到的数据总是null
,除非我从另一个C#应用程序使用PostAsJsonAsync
。
我发送的json
具有以下格式:
{
"_isValid": true,
"_username": "test",
"_guid": "f3f574eb-5710-43c5-a4ff-0b75866a72a7",
"_dt": "2018-02-11T15:53:44.6161198Z",
"_ms": "IsSelected"
[...]
}
ASP控制器具有以下形式:
// POST: api/NativeClient
[HttpPost]
public async Task<IActionResult> Post([FromBody]string value)
{
[...]
1.案例:从另一个C#应用程序发送PostAsJsonAsync
在一种情况下,我通过另一个单独的C#应用程序成功发送请求,该应用程序使用PostAsJsonAsync
,如下所示:
HttpClient client = new HttpClient();
client.BaseAddress = new System.Uri("http://localhost:51022/");
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
var response = await client.PostAsJsonAsync("/api/NativeClient/", json);
控制器接收呼叫并成功填充值
。
2.案例:使用外部REST客户端(如Postman)发送
在另一种情况下,我尝试通过另一个REST客户端发送请求,例如通过REST客户端扩展的Postman或Visual Studio Code:
POST http://localhost:51022/api/NativeClient/ HTTP/1.1
content-type: application/json; charset=utf-8
{
"_isValid": true,
"_username": "gnappo",
"_guid": "f3f574eb-5710-43c5-a4ff-0b75866a72a7",
"_dt": "2018-02-11T15:53:44.6161198Z",
"_ms": "IsSelected"
[...]
}
在这里,请求由控制器接收,但字符串值始终为
null
。
我尝试过删除
[FromBody]
标记,检查请求头,检查主体中的json字符串(完全相同),以及下面引用中提到的其他东西,但都不起作用。
我错过了什么?
尝试的其他测试/参考
执行HTTP Post请求时,value始终为空
sp.netCore 2 API POST对象为NULL?
ASP中的模型绑定JSON帖子。网芯
POST请求需要声明发送的数据为text/普通
。使用HttpClient
的示例:
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("text/plain"));
这样,API将能够以字符串
内容的形式接收JSON。
如果您希望接收反序列化到原始模型对象中的内容,则需要将此标头添加到请求中:
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
并将您的控制器更改为:
// POST: api/NativeClient
[HttpPost]
public async Task<IActionResult> Post([FromBody]yourClass class)
{
[...]
将JSON对象发送到您的API:
var Content = new StringContent(json, Encoding.UTF8, "application/json");
var response = await client.PostAsync("/api/NativeClient/", Content);
PostAsJsonAsync
将C#Object作为输入;它在发送之前将其序列化为JSON字符串。相反,PostAsync可以使用JSON字符串发送。
看到这个问题了吗
有关更多信息,请参阅此链接:
C语言中的后同步#
后同步
你应该反序列化JSON
到某个模型(类),因为我相信你在代码的某个地方反序列化了这个字符串:
public class YourModel
{
public bool _isValid { get; set; }
public string _username { get; set; }
public string _guid { get; set; }
public DateTime _dt { get; set; }
public string _ms { get; set; }
// other properties from json
}
以及你的行动:
[HttpPost]
public async Task<IActionResult> Post([FromBody] YourModel value)
关于您的应用程序:
在应用程序中,您将json
作为参数传递给PostAsJsonAsync()
,但您需要传递对象,它将被解析为json
:
var response = await client.PostAsJsonAsync("/api/NativeClient/", yourObject);
yourObject
是类的实例,应该解析为JSON
。
评论后:
此外,请尝试将应用程序代码更改为:
HttpClient client = new HttpClient();
client.BaseAddress = new System.Uri("http://localhost:51022/");
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
var httpContent = new StringContent(json, Encoding.UTF8, "application/json");
var response = await client.PostAsync("/api/NativeClient/", httpContent);
问题内容: 所以我在与node.js一起运行的server.js文件中有以下代码。我正在使用express处理HTTP请求。 我在终端中运行以下命令: 运行该server.js后,将输出以下内容。 所以req.body是。我阅读了其他有关类似问题的Stack Overflow帖子,其中由于正文解析器,内容类型不正确。但这不是问题,因为内容类型是application / json。 有什么想法如何
我有麻烦向服务器发出POST请求,我的数据没有发送回我。 我有一个非常简单的PHP脚本: 服务器脚本 我想对这个脚本发出一个POST请求,并获得一些JSON数据作为响应。 工作要求 如果我从HTML发出一个POST请求,这将非常有效: 这也起作用: 响应 不工作脚本(desire):Aurelia提取客户端(JS2016) 提取客户端配置 响应 php备选方案 我尝试在PHP中查看数组内部的内
代码如下: 这将向flask发送一个{“name”:“go”}JSON字典。Flask应该将语言名称追加到数组中,并在响应中返回完整的数组。现在,当我手动发送请求时,这就工作了,所以这不是Flask的错误。但是当我从iOS发送上述内容时,我在flask控制台中得到request.json==None。很明显,我送的是一具空尸体,但我不应该。你知道我哪里出了问题吗?
<?php $requestBody = array( 'lang' => 'php', 'ver' => 'any' ); $http = HttpRequest::newSession(); $response = $http->post('http://www.baidu.com/', $requestBody);
我使用的是junit4提供的restassured。在我的测试方法中,我在mongodb中创建了一个对象,当我运行测试时,它也成功地持久化了。但是我需要存储创建的id,所以我尝试获取响应体。但是< code>response.getBody()。asString()为空。 当我从外部调用restendpoint时,它会返回带有相关字段的响应体,因此rest API没有问题。 如果上述问题没有答案,