首页 > 解决方案 > HttpContent 错误请求 {"error":{"message":"强制参数丢失","error_key":null}}

问题描述

我正在尝试使用 HttpClient 做一个简单的 POST,但我遇到了一些 HttpRequestMessage.Content. \n 简而言之,如果我在没有 的情况下对所需参数之一进行硬编码,escape character例如:

string value = "lorem ipsum lorem ipsum lorem ipsum lorem ipsum";
request.Content = new StringContent("{\"requiredParameter\":\""+ value +"\}");

一切正常。

但是,如果我按如下方式连接字符串:

string value = "\norem ipsum \n" +
                       "lorem ipsum \n" +
                       "lorem ipsum\n";
or even
//string value = "\nlorem ipsum lorem ipsum lorem ipsum lorem ipsum";
request.Content = new StringContent("{\"requiredParameter\":\""+ value +"\}");

它没有,我收到一个错误的请求:

Status code: BadRequest
{"error":{"message":"Mandatory parameter missed","error_key":null}}

已经试过了

System.Text.Json.JsonSerializer.Serialize

 var options = new JsonSerializerOptions
 {
           WriteIndented = true,
  };
string json = System.Text.Json.JsonSerializer.Serialize(value, options);

StringBuilder因为它更适合广泛的字符串操作。

string value1 = "\nlorem ipsum \n";
string value2 = "lorem ipsum \n";
string value3 = "lorem ipsum\n";

 stringBuilder.Append(value1);
 stringBuilder.Append(value2);
 stringBuilder.Append(value3);

request.Content = new StringContent("{\"requiredParameter\":\""+ stringBuilder.toString() +"\}");

并且,Encoding.UTF8,“应用程序/json”

request.Content = new StringContent("{\"requiredParameter\":\""+ value +"\", Encoding.UTF8, "application/json");

没用。

一个最小的复制:

static async Task<string> postAsync(Uri uri, string postContent)
{
    using (var httpClient = new HttpClient())
    {
        using (var request = new HttpRequestMessage(new HttpMethod("POST"), "https://www.url.com/"))
        {
                   request.Headers.TryAddWithoutValidation("authority", "www.url.com");
                   request.Headers.TryAddWithoutValidation("accept", "application/json, text/plain, */*");
                   request.Headers.TryAddWithoutValidation("x-oauth2-required", "true");                   
                   
                   request.Content = new StringContent("{\"requiredParameter\":\""+ value +"\}");

                   return await response.Content.ReadAsStringAsync();
            }
      }
}                    

static async Task Main(string[] args)
{
    Uri uri = new Uri("www.uri.com");
    var postContent = GenerateDynamicStringContent(List<string> params);
    await PostAsync(uri, postContent);
}

我在这里想念什么?

标签: c#.net-coredotnet-httpclient

解决方案


不同之处在于,在第二个和第三个选项中,每个lorem ipsum.

concatenate如果您在字符串(每行的末尾)中给出空格并且类似地在stringBuilder那么它们将与第一个相同。

与连接

string value = "lorem ipsum " +
                       "lorem ipsum " +
                       "lorem ipsum ";

使用 StringBuilder

string value1 = "lorem ipsum ";
string value2 = "lorem ipsum ";
string value3 = "lorem ipsum";

 stringBuilder.Append(value1);
 stringBuilder.Append(value2);
 stringBuilder.Append(value3);

推荐阅读