HttpWebRequest POST добавляет значение NULL в переменные формы - PullRequest
2 голосов
/ 10 января 2011

Я пытаюсь вызвать службу RESTful, используя объект HttpWebRequest через POST. Я пытаюсь передать 1 переменную с телом запроса, который содержит строку в кодировке URL. Я вижу запрос, когда он попадает на сервер; однако, это показывает 2 переменных формы. Первый - это Form [null], а второй - моя переменная.

Я пытаюсь найти источник этого NULL-ключа; однако я не могу. Любые идеи о том, как я могу это исправить, поскольку это вызывает проблемы, когда я пытаюсь использовать его с веб-фреймворком Нэнси для .Net.

Код:

var request = WebRequest.Create("http://localhost:8888/RouteName") as HttpWebRequest;
request.Method = "POST";
request.ContentType = "application/x-www-form-urlencoded";

var jsonString =
    "[\"00000000-0000-0000-000000000001\",\"00000000-0000-0000-000000000002\"]";

var data = new StringBuilder();
data.Append("Keys=" + HttpUtility.UrlEncode(jsonString));

byte[] byteData = UTF8Encoding.UTF8.GetBytes(data.ToString());
request.ContentLength = byteData.Length;

using (var requestStream = request.GetRequestStream())
{
    requestStream.Write(byteData, 0, byteData.Length);
}

using (var response = request.GetResponse() as HttpWebResponse)
{
    // ends up with a 500 response.
}

1 Ответ

2 голосов
/ 10 января 2011

Я не использовал Webrequest в значительной степени, в основном потому, что мне кажется, что использовать веб-клиента намного проще.Вот быстрый пример использования Webclient для отправки данных с использованием POST:

class Program
{
    static void Main(string[] args)
    {
        var webclient = new WebClient();
        var valueToSend = new Message("some data", "some other data");
        var parameters = new NameValueCollection 
          {
            {"Key", Jsonify(valueToSend)}
          };
        webclient.UploadValues(
          "http://localhost:8888/Ny", 
          "POST", 
          parameters);
    }

    static string Jsonify(object data)
    {
        using (MemoryStream ms = new MemoryStream())
        {
            var ser = new DataContractJsonSerializer(data.GetType());
            ser.WriteObject(ms,data);
            return Encoding.Default.GetString(ms.ToArray());
        }
    }

}

Это не то, что вы искали, но оно устраняет множество потенциальных источников ошибок.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...