3

Windows Phone8からWCFサーバーにHTTPPUT要求を送信したいのですが、識別のためにカスタムヘッダーを送信する必要があります。("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で見ることができるように:私のコンピュータには何も到着していません(同じURLWebClientで、カスタムヘッダーを除いてすべてが正常に動作します)。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を試しても...ただし、これは許可されておらず、例外がスローされます)

4

1 に答える 1

4

ヘッダーはどこに設定しますか?これを行う方法は次のとおりです。

request.Headers["mycustomheader"] = "abc";
于 2012-11-30T09:38:39.177 に答える