Я делаю web-api в .net core 2.1 (C #) и у меня возникают проблемы с отправкой акцентированных символов в запросе POST.
До сих пор я пробовал два разных подхода: создание контента, который будет публиковаться с использованием FormUrlEncodedContent и StringContent. Я использовал ссылки из https://pt.stackoverflow.com/questions/121713/applicationx-www-form-urlencoded-com-httpwebrequest (на португальском).
Наверное, у меня проблемы с кодировкой UTF-8 по какой-то причине.
Использование FormUrlEncodedContent:
var values = new List<KeyValuePair<string, string>>();
object[] myKeys = new object[content.DsValues.Count];
object[] myValues = new object[content.DsValues.Count];
content.DsValues.Keys.CopyTo(myKeys, 0);
content.DsValues.Values.CopyTo(myValues, 0);
foreach (object value in myValues)
{
values.Add(new KeyValuePair<string, string>("value", value.ToString()));
}
foreach (object key in myKeys)
{
values.Add(new KeyValuePair<string, string>("field", key.ToString()));
}
values.AddRange(content.Values);
var string_message = new FormUrlEncodedContent(values).ReadStringAsync();
var postRequest = Encoding.UTF8.GetBytes(string_message);
request.ContentLength = postRequest.Length;
var stream = request.GetRequestStream();
stream.Write(postRequest, 0, postRequest.Length);
stream.Close();
Использование StringContent:
var formurlstring = "";
foreach(object value in myValues)
{
formurlstring = formurlstring + "value=" + value.ToString() + "&";
}
foreach(object key in myKeys)
{
formurlstring = formurlstring + "field=" + key.ToString() + "&";
}
var encoded = formurlstring.Replace(" ", "+");
var string_message = new StringContent(HttpUtility.UrlEncode(encoded));
var postRequest = Encoding.UTF8.GetBytes(string_message);
request.ContentLength = postRequest.Length;
var stream = request.GetRequestStream();
stream.Write(postRequest, 0, postRequest.Length);
stream.Close();
Насколько я проверил, строка, возвращаемая FormUrlEncodedContent, содержит уже закодированные символы ударения, в то время как строка, которую я восстанавливаю из StringContent, все еще содержит символы ударения. Я могу опубликовать оба из них во внешнем веб-приложении, но всякий раз, когда я иду проверить то, что я написал, акцентированные символы не являются правильными. Я бы ожидал что-то вроде:
COMESTÍVEL
Но всякий раз, когда я захожу, проверяю на веб-сайте то, что было опубликовано:
COMESTÃVEL
Заранее спасибо за ответы и извините, если я забыл некоторую информацию о коде.