Неверный URI: строка Uri слишком длинная при попытке опубликовать словарь значений в API - PullRequest
0 голосов
/ 27 сентября 2019

Приведенный ниже код создает пост-запрос к API, но в некоторых случаях html_text является массивным (более 70 000 символов +), который кажется слишком большим, вызывая ошибку Invalid URI: The Uri string is too long, и я не могу найти способ ее преодоления.

Как увеличить эффективный лимит URI?

public async Task<string> CreateCampaign(string apiKey, string fromName, string fromEmail, string replyTo, string title,
            string subject, string plaintext, string htmltext, string listIds, string segmentIds, string excludeListIds,
            string excludeSegmentIds, string brandId, string queryString, string sendCampaign)
        {
            var values = new Dictionary<string, string>
            {
               { "api_key", apiKey },
               { "from_name", fromName },
               { "from_email", fromEmail },
               { "reply_to", replyTo },
               { "title", title },
               { "subject", subject },
               { "plain_text", plaintext },
               { "html_text", htmltext },
               { "list_ids", listIds },
               { "segment_ids", segmentIds },
               { "exclude_list_ids", excludeListIds },
               { "exclude_segment_ids", excludeSegmentIds },
               { "brand_id", brandId },
               { "query_string", queryString },
               { "send_campaign", sendCampaign },

            };

            var content = new FormUrlEncodedContent(values);
            var response = await client.PostAsync("[Redacted-DOMAIN]/api/campaigns/create.php", content);
            var responseString = await response.Content.ReadAsStringAsync();
            return responseString;
        }
    }

1 Ответ

1 голос
/ 27 сентября 2019

FormUrlEncodedContent ограничен в размере.

Сервер принимает JSON?Если это так, попробуйте это:

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

вместо

 var content = new FormUrlEncodedContent(values);

Если нет, вы можете попробовать использовать этот обходной путь:

 var items = formData.Select(i => WebUtility.UrlEncode(i.Key) + "=" + WebUtility.UrlEncode(i.Value));
var content = new StringContent(String.Join("&", items), null, "application/x-www-form-urlencoded");
var response = await client.PostAsync(url, content);
...