C # WebClient неправильно отправляет данные в PHP-скрипт

C #:

using (WebClient client = new WebClient()) {
byte[] response = client.UploadValues("http://example.com/api/server/key",
new NameValueCollection() {
{ "key", key }
});

string result = Encoding.UTF8.GetString(response);
Console.WriteLine(result);
}

PHP:

$key = $_POST["key"];
echo($key);

Когда это выполняется, массив PHP $ _POST никогда не имеет какого-либо значения, отправленного на него. Это означает, что эхо-линия не имеет выхода.

Кроме того, да, ключ имеет значение, оно просто обрезается в этом примере.

1

Решение

Я не уверен, выражение new NameValueCollection() { ... } делает то, что, как ты думаешь, должно делать.

Вы должны быть явными и сказать

NameValueCollection values = new NameValueCollection();
values.Add("key", key);
byte[] response = client.UploadValues("http://example.com/api/server/key",
values);

Поиск инициализаторов объекта показывает Инициализаторы коллекции

Инициализаторы коллекции позволяют вам указать один или несколько инициализаторов элементов при инициализации класса коллекции, который реализует IEnumerable, или класса с методом расширения Add.

И пример

List<Cat> cats = new List<Cat>
{
new Cat(){ Name = "Sylvester", Age=8 },
new Cat(){ Name = "Whiskers", Age=2 },
new Cat(){ Name = "Sasha", Age=14 }
};

Так что, возможно, использование инициализатора без скобок работает, например,

byte[] response = client.UploadValues("http://example.com/api/server/key",
new NameValueCollection {
{ "key", key }
});
1

Другие решения

URL кодировать значение как:

client.UploadValues("http://example.com/api/server/key", new NameValueCollection()
{
{ "key", HttpUtility.UrlEncode(key) }
});
1

По вопросам рекламы [email protected]