簡體   English   中英

帶有自定義標頭的Windows Phone 8 Http請求

[英]Windows Phone 8 Http request with custom header

我想從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:沒有任何東西到達我的電腦(同樣的網址, 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在標題內...但是這是不允許的並且拋出異常)

你在哪里設置標題? 這是怎么做的:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM