VS2022 C 中的 Http Post Json#

Http Post Json in VS2022 C#

提问人:Esmail 提问时间:11/15/2023 最后编辑:GSergEsmail 更新时间:11/15/2023 访问量:51

问:

我有json文件。当我通过 Postman(应用程序)发送它时,它可以工作,但在 C# 代码中我收到“错误请求”

Json 文件:

{
    "name": "Token",
    "request": {
        "method": "POST",
        "header": [
            {
                "key": "Content-Type",
                "value": "application/x-www-form-urlencoded"
            },
            {
                "key": "Authorization",
                "value": "Basic cm9jbGllbnQ6c2VjcmV0"
            }
        ],
        "body": {
            "mode": "raw",
            "raw": "grant_type=password&username=TestUser&password=@Sep123456&scope=SepCentralPcPos openid"
        },
        "url": {
            "raw": "https://idn.seppay.ir/connect/token",
            "protocol": "https",
            "host": [
                "idn",
                "seppay",
                "ir"
            ],
            "path": [
                "connect",
                "token"
            ]
        }
    },
    "response": []
}

我试过这段代码

public async Task<String> GET_TOKEN()
{
    try
    {
        JObject body = new JObject();
        body.Add("mode", "raw");
        body.Add("raw", "grant_type=password&username=TestUser&password=@Sep123456&scope=SepCentralPcPos openid");

        using (var httpClient = new HttpClient())
        {
            using (var request = new HttpRequestMessage(new HttpMethod("POST"), TokenAddress))
            {
                //request.Headers.TryAddWithoutValidation("Authorization", "Basic cm9jbGllbnQ6c2VjcmV0");
                request.Content = new StringContent(body.ToString(), Encoding.UTF8, "application/json");
                request.Content.Headers.ContentType = MediaTypeHeaderValue.Parse("application/x-www-form-urlencoded");
                
                var response = await httpClient.SendAsync(request);
                string responseBody = await response.Content.ReadAsStringAsync();

                JObject jsnResualt = JsonConvert.DeserializeObject<JObject>(responseBody);

                string token = "";
                long expiresIn = 0;
                return "";
            }
        }
    }
    catch (Exception ex)
    {
        return "";
    }
}

我找不到问题

C# JSON httpclient net-4.6.2

评论

1赞 GSerg 11/15/2023
那不是您要发送的 json。您正在发送 .{"mode": "raw", "raw": "grant_type=password&username=TestUser&password=@Sep123456&scope=SepCentralPcPos openid"}
0赞 Filburt 11/15/2023
如果您使用的是 Postman,则可以在此处创建工作请求中的 C# 代码,并将其与您的代码进行比较。
0赞 Esmail 11/15/2023
此文件适用于 Postman 应用程序。文件末尾是要发送的 URL

答:

0赞 Esmail 11/15/2023 #1

这不是 Json 发布的 如果由 HttpClient 发布,它将起作用

using (var client = new HttpClient())
        {
            client.BaseAddress = new Uri("https://idn.seppay.ir/connect/token");
            client.DefaultRequestHeaders.Add("Authorization", "Basic cm9jbGllbnQ6c2VjcmV0");
            var content = new StringContent("grant_type=password&username=TestUser&password=@Sep123456&scope=SepCentralPcPos openid", null, "application/x-www-form-urlencoded");
            
            var result = client.PostAsync("", content).Result;
            string resultContent = result.Content.ReadAsStringAsync().Result;
        }