使用 httpClient PostAsync 调用 api - 400 错误请求

问题描述 投票:0回答:1

关于这个问题有很多类似的问题,但我无法得到任何对我有用的答案..

我正在从我的控制器调用另一个 api Post 请求..但我一直收到 400 错误请求..

public async Task<JsonResult> TestSCIMPost(AppAuth auth)
{
    //Method 3:
    HttpClient client = new HttpClient();
        var jsonRequest = Newtonsoft.Json.JsonConvert.SerializeObject(auth);
        var content = new StringContent(jsonRequest);
        content.Headers.Remove("Content-Type");
        content.Headers.Add("Content-Type", "application/json");
        HttpResponseMessage response = await client.PostAsJsonAsync(
           URL, content);

        return new JsonResult(response);
}

卷曲 curl -X POST“https://localhost:5001/api/Employee/api/Employee/TestSCIMPost”-H“接受:/”-H“内容类型:application/json-patch+json”-d“ {"client_id":"xyz","grant_type":"cc","client_secret":"abc","scope":"读"}"

我尝试了下面列出的其他几种方法..

public async Task<JsonResult> TestSCIMPost(AppAuth auth)
    {

        /*var response = string.Empty;
        var jsonRequest = Newtonsoft.Json.JsonConvert.SerializeObject(auth);
        byte[] messageBytes = System.Text.Encoding.UTF8.GetBytes(jsonRequest);
        var content = new ByteArrayContent(messageBytes);
        //HttpContent c = new StringContent(jsonRequest, Encoding.UTF8, "application/json");
        content.Headers.Remove("Content-Type");
        content.Headers.Add("Content-Type", "application/json");
        //content.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/json");
        using (var client = new HttpClient())
        {
            //client.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json"));
            HttpResponseMessage result = await client.PostAsync(URL, content);
            if (result.IsSuccessStatusCode)
            {
                response = result.StatusCode.ToString();
            }
        }*/
        //Method:2
        //HttpClient client = new HttpClient();
        //client.BaseAddress = new Uri(URL);
        //client.DefaultRequestHeaders.Accept.Clear();
        //client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("*/*"));

        //var requestMessage = Newtonsoft.Json.JsonConvert.SerializeObject(auth);
        //var content = new StringContent(requestMessage, Encoding.UTF8, "application/json");
        //content.Headers.Remove("Content-Type");
        //content.Headers.Add("Content-Type", "application/json");
        //HttpResponseMessage result = await client.PostAsync(URL, content);

        return new JsonResult(response);
    }

正文来自身份验证(我正在序列化并添加到我的请求中的前端)

这里出了什么问题?是utf编码吗?如何修复?

c# api controller http-headers http-status-code-400
1个回答
0
投票

发生这种情况的一个原因是,如果您在正文中发布内容(正如您所做的那样),解析器希望在查询中找到它。

所以如果你有这样的事情:

string url = "https://localhost:5001/api/Employee/TestSCIMPost";
var content = new StringContent("{\"client_id\":\"xyz\",\"grant_type\":\"cc\"}");
HttpResponseMessage response = await client.PostAsync(url, content);

尝试将其更改为:

string url = "https://localhost:5001/api/Employee/TestSCIMPost?client_id=xyz&grant_type=cc";
var content = new StringContent("");
HttpResponseMessage response = await client.PostAsync(url, content);
© www.soinside.com 2019 - 2024. All rights reserved.