带有自定义标头的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";