带有自定义标头的Windows Phone 8 Http请求

我想从Windows Phone 8向WCF服务器发送HTTP PUT请求,为了识别,我必须发送自定义标头。 (假设“mycustomheader”=“abc”)

到目前为止我使用的是WebClient ,但是Webclient.Headers似乎没有Add方法,因此除了HttpRequestHeader枚举中的标题之外,不可能发送标题。 有没有办法用WebClient做到这一点?


我看到可以使用HttpWebRequest类设置自定义标头,但我根本无法让它做任何事情。 我的测试代码(基本上是从http://msdn.microsoft.com/en-us/library/system.net.httpwebrequest.begingetrequeststream.aspx复制的样本):

 public void dosth() { HttpWebRequest wr = (HttpWebRequest)WebRequest.Create("http://mycomputer/message"); wr.Method = "PUT"; wr.ContentType = "application/x-www-form-urlencoded"; wr.BeginGetRequestStream(new AsyncCallback(GetRequestStreamCallback), wr); allDone.WaitOne(); } private static void GetRequestStreamCallback(IAsyncResult asynchronousResult) { HttpWebRequest request = (HttpWebRequest)asynchronousResult.AsyncState; Stream postStream = request.EndGetRequestStream(asynchronousResult); string postData = "{'Command': { 'RequestType' : 'Status', 'Test' : '1' }}"; byte[] byteArray = Encoding.UTF8.GetBytes(postData); postStream.Write(byteArray, 0, postData.Length); postStream.Close(); request.BeginGetResponse(new AsyncCallback(GetResponseCallback), request); } private static void GetResponseCallback(IAsyncResult asynchronousResult) { HttpWebRequest request = (HttpWebRequest)asynchronousResult.AsyncState; HttpWebResponse response = (HttpWebResponse)request.EndGetResponse(asynchronousResult); Stream streamResponse = response.GetResponseStream(); StreamReader streamRead = new StreamReader(streamResponse); string responseString = streamRead.ReadToEnd(); streamResponse.Close(); streamRead.Close(); response.Close(); allDone.Set(); } 

正如我所看到的wireshark:没有任何东西到达我的电脑(同样的url, WebClient一切正常……除了自定义标题)。 在调试中,我可以看到正在触发并运行的GetRequestStreamCallback 。 但它永远不会到达GetResponseCallback 。 我发现的大多数内容都是指像GetResponse()这样的方法似乎无法使用

什么是去的地方? 是否有可能让HttpWebRequest工作,或者是否有一些解决方法来获取WebClient的自定义标头集还是还有另一种更好的方法?


编辑:webclient代码:

 WebClient wc = new WebClient(); wc.Headers[HttpRequestHeader.ContentLength] = data.Length.ToString(); wc.Headers[HttpRequestHeader.ContentType] = "application/x-www-form-urlencoded"; wc.UploadStringAsync(new Uri("http://mycomputer/message"), "PUT", data); 

将正确的数据发送到正确的URL。 但是,设置自定义标头似乎是不可能的。 (甚至试过\ r \ n在标题内…但是这是不允许的并且抛出exception)

你在哪里设置标题? 这是怎么做的:

 request.Headers["mycustomheader"] = "abc";