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 никогда не имеет какого-либо значения, отправленного на него. Это означает, что эхо-линия не имеет выхода.
Кроме того, да, ключ имеет значение, оно просто обрезается в этом примере.
Я не уверен, выражение 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 }
});
URL кодировать значение как:
client.UploadValues("http://example.com/api/server/key", new NameValueCollection()
{
{ "key", HttpUtility.UrlEncode(key) }
});