gpt4 book ai didi

c# - API Controller 无法从 POST 正文中读取 Json

转载 作者:行者123 更新时间:2023-12-05 08:40:50 26 4
gpt4 key购买 nike

背景

我正在将我体内的 JSON 发送到我的 API Controller ,但不断收到以下错误。

{"":["Unexpected character encountered while parsing value: {. Path '', line 1, position 1."]}

我的 HTTP 请求

HttpClient client = new HttpClient();
HttpRequest httpRequest;
HttpResponseMessage httpResponse = null;
httpRequest = new HttpRequest("", HostnameTb.Text, null);

var values = new Dictionary<string, string>
{
{ "APIKey", APIKeyTb.Text }
};

string json = JsonConvert.SerializeObject(values);
StringContent content = new StringContent(json.ToString(), Encoding.UTF8, "application/json");
httpResponse = client.PostAsync(HostnameTb.Text, content).Result;

var responseString = await httpResponse.Content.ReadAsStringAsync();

我的 Controller 看起来像这样。

[HttpPost]
public void Post([FromBody] string value)
{
//Never gets here.
}

正文中的 Json。

{"APIKey":"1283f0f8..."}

问题

我更愿意使用 .Net Core [From Body] 功能,而不是手动获取内容。

我希望 JSON 字符串在字符串 Value 参数中可用。

我错过了什么?

最佳答案

ASP.NET Core 尝试将 {"APIKey":"1283f0f8..."} 从 JSON 反序列化为 string 值,但失败了,因为它期望输入为有效的 JSON 字符串。

换句话说,如果您的主体是 "{\"APIKey\":\"1283f0f8...\"}",您将在输入变量中获得预期的 JSON 字符串。

为了在不更改 HTTP 请求的情况下获取 APIKey 值,创建一个输入类型:

public class Input
{
public string ApiKey { get; set; }
}

并将其用作 Controller 操作的输入:

[HttpPost]
public void Post([FromBody] Input input)
{
var apiKey = input.ApiKey;
// etc
}

或者,更改您的 HTTP 请求以发送 string:

// ...
var content = new StringContent(JsonConvert.SerializeObject(json), Encoding.UTF8, "application/json");
// ...

注意使用 JsonConvert.SerializeObject() 而不是 ToString()"foo".ToString() 仍然只是 "foo",而您需要 "\"foo\""

关于c# - API Controller 无法从 POST 正文中读取 Json,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53156334/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com