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

时间:2012-11-30 09:34:44

标签: c# http httpwebrequest webclient windows-phone-8

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

到目前为止我使用WebClient,但Webclient.Headers似乎没有Add方法,因此无法发送除HttpRequestHeader之外的标题enum。有没有办法用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:没有任何东西到达我的电脑(同样的网址,一切正常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);

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

1 个答案:

答案 0 :(得分:4)

你在哪里设置标题? 以下是如何做到这一点:

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