WebClient на WP7 - Бросить "Запрос с этим методом не может иметь тело запроса" - PullRequest
0 голосов
/ 22 марта 2012

Если я выполню этот код в Consoleapp, он будет работать нормально:

        string uriString = "http://url.com/api/v1.0/d/" + Username + "/some?amount=3&offset=0";

        WebClient wc = new WebClient();

        wc.Headers["Content-Type"] = "application/json";
        wc.Headers["Authorization"] = AuthString.Replace("\\", "");

        string responseArrayKvitteringer = wc.DownloadString(uriString);
        Console.WriteLine(responseArrayKvitteringer);

Но если я перенесу код в мой проект WP7, например, так:

        string uriString = "http://url.com/api/v1.0/d/" + Username + "/some?amount=3&offset=0";

            WebClient wc = new WebClient();

            wc.Headers["Content-Type"] = "application/json";
            wc.Headers["Authorization"] = AuthString.Replace("\\", "");

            wc.DownloadStringCompleted += new DownloadStringCompletedEventHandler(wc_DownloadStringCompleted);
            wc.DownloadStringAsync(new Uri(uriString));

    void wc_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
    {
        MessageBox.Show(e.Result);
    }

Я получу исключение: У запроса с этим методом не может быть тела запроса.

Почему?

Решение состоит в том, чтобы удалить тип содержимого:

   string uriString = "http://url.com/api/v1.0/d/" + Username + "/some?amount=3&offset=0";

            WebClient wc = new WebClient();

            //wc.Headers["Content-Type"] = "application/json";
            wc.Headers["Authorization"] = AuthString.Replace("\\", "");

            wc.DownloadStringCompleted += new DownloadStringCompletedEventHandler(wc_DownloadStringCompleted);
            wc.DownloadStringAsync(new Uri(uriString));

    void wc_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
    {
        MessageBox.Show(e.Result);
    }

1 Ответ

6 голосов
/ 23 марта 2012

Не знаю, почему консоль не генерирует, но вы по сути используете неправильный заголовок.

Content-Type в запросе обозначает содержимое данных POST / PUT (тело HTTP-запроса).Вам нужен заголовок Accept.

wc.Headers["Accept"] = "application/json";

http://msdn.microsoft.com/en-us/library/aa287673(v=VS.71).aspx

...