HttpClient向api发送空值,而不是查看json对象
Posted
技术标签:
【中文标题】HttpClient向api发送空值,而不是查看json对象【英文标题】:HttpClient sending null values to api, not looking at json object 【发布时间】:2021-12-19 01:40:54 【问题描述】:我正在使用 ASP.NET 网站。我需要从表单中收集数据并将其发送到 api。 PostAsync() 需要两个参数,因此我必须将对象转换为 JSON 才能发送。这就是我的麻烦所在,因为 api 只接收空值。这是我正在查看的相关代码:
string apiurl = "http://localhost:5000/";
var content = new StringContent(JsonConvert.SerializeObject(formData), Encoding.UTF8, "application/json");
using (var httpClient = new HttpClient())
using (var response = await httpClient.PostAsync($"apiurlapi/Contact/Create", content))
await response.Content.ReadAsStringAsync();
最后,我需要 api 来接收来自 formData 对象的值。但是它收到的值是空的。
我无法判断它是否正确转换为 JSON。 JsonConvert.SerializeObject(formData) 正在用我的数据准确地创建一个字符串,而 formData 对象本身就有我的值。但是当我检查内容变量时,我在任何地方都找不到该字符串。
这是 api 标头:
[HttpPost]
[Route("Create")]
public async Task<IActionResult> Create(string listId, string email, string firstName, string lastName)
我该怎么做:
1 - 验证 json 是否正确?
2 - 向 api 发送非空值?
编辑:
这里的要求是我制作的课程:
public class Report
public string listId get; set;
public string email get; set;
public string firstName get; set;
public string lastName get; set;
以及我是如何创建对象的:
Report formData = new Report
listId = listId,
email = getFormValueFromKey(formModel.fieldNameValuePairs, "Email"),
firstName = "None",
lastName = "None"
;
【问题讨论】:
您也必须显示您的 Api 标头,请 [HttpPost] [Route("Create")] public async Task由于您使用的是表单数据,并且您的 API 参数看起来像键值对,我建议您尝试 application/x-www-form-urlencoded 内容类型
var content = new FormUrlEncodedContent(formData);
var response = await PostAsync($"apiurlapi/Contact/Create", content);
if (response.IsSuccessStatusCode)
var stringData = await response.Content.ReadAsStringAsync();
var result = JsonConvert.DeserializeObject<object>(stringData);
否则您将需要创建一个视图模型并使用 frombody 属性。
更新
很遗憾,我看不到您的表单数据。但是如果它不是键值对,你可以将它转换成字典,或者更好地发布它,以便我们推荐如何更好地使用它
var content = new FormUrlEncodedContent(
new Dictionary<string, string>()
"listId", formData.listId,
"email", formData.email
);
或者如果你想使用 json 然后创建视图模型
public class Report
public string listId get; set;
public string email get; set;
.....
和api
[HttpPost]
[Route("Create")]
public async Task<IActionResult> Create([FromBody] Report model)
和代码
var json = JsonConvert.SerializeObject(formdata);
var content= new StringContent(json, Encoding.UTF8, "application/json");
【讨论】:
我试图实现这一点,但不得不将我的 formData 对象转换为 IEnumerable以上是关于HttpClient向api发送空值,而不是查看json对象的主要内容,如果未能解决你的问题,请参考以下文章
为啥 HttpClient.PostAsync 似乎将请求作为 GET 而不是 POST 发送?
如何使用 HttpClient 将带有 JSON 的 DELETE 发送到 REST API
使用 HttpClient 和 RXJS 将数据发布到 Web API withCredentials: true