Windows phone 7 WP7上的网络客户端-抛出“;使用此方法的请求不能有请求正文“;

Windows phone 7 WP7上的网络客户端-抛出“;使用此方法的请求不能有请求正文“;,windows-phone-7,webclient,webclient-download,Windows Phone 7,Webclient,Webclient Download,如果我在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["A

如果我在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);
    }

不确定为什么Console没有抛出,但实际上您使用了错误的标题

请求上的内容类型表示POST/PUT数据的内容(HTTP请求的主体)。您需要的是Accept头

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

不确定Console为什么没有抛出,但实际上您使用了错误的标题

请求上的内容类型表示POST/PUT数据的内容(HTTP请求的主体)。您需要的是Accept头

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

出于各种原因和更多(!),我建议您尝试使用WebRequest而不是WebClient包装器。。。WebClient的一些“技巧”可能会导致此问题,WebRequest使您能够更好地控制Http通信!嗨,佩德罗。我已经试过了。由于各种原因和更多(!),我建议您尝试使用WebRequest而不是WebClient包装器。。。WebClient的一些“技巧”可能会导致此问题,WebRequest使您能够更好地控制Http通信!嗨,佩德罗。我已经试过了。这给了我同样的结果。而且,尽管不相关,佩德罗的建议是非常好的。我做的第一件事是使用WebRequest创建自己的WebClient包装器。它更容易调试,也让您可以更好地控制UI中的操作。您是对的。标题中带有Accept的解决方案正在运行。标题中只有授权的解决方案也在运行。谢谢。另外,尽管不相关,佩德罗的建议很好。我做的第一件事是使用WebRequest创建自己的WebClient包装器。它更容易调试,也让您可以更好地控制UI中的操作。您是对的。标题中带有Accept的解决方案正在运行。标题中只有授权的解决方案也在运行。谢谢