2

Windows ストア アプリ (Windows Metro アプリ) から RESTful Web サービス (Azure でホストされている) を呼び出しています。これはサービス定義です:

[OperationContract]
[WebInvoke(UriTemplate="/Test/PostData", 
    RequestFormat= WebMessageFormat.Json, 
    ResponseFormat= WebMessageFormat.Json, Method="POST", 
    BodyStyle=WebMessageBodyStyle.WrappedRequest)]
string PostDummyData(string dummy_id, string dummy_content, int dummy_int);

Windowsストアアプリから呼び出すと、投稿後にリクエストエラーが発生します(PostDummyDataに配置したブレークポイントにもヒットしませんでした。次の方法を試しました:

StringContent オブジェクトの使用

using (var client = new HttpClient())
{
  JsonObject postItem = new JsonObject();
  postItem.Add("dummy_id", JsonValue.CreateStringValue("Dummy ID 123"));
  postItem.Add("dummy_content", JsonValue.CreateStringValue("~~~Some dummy content~~~"));
  postItem.Add("dummy_int", JsonValue.CreateNumberValue(1444));

  StringContent content = new StringContent(postItem.Stringify());
  using (var resp = await client.PostAsync(ConnectUrl.Text, content))
    {
        // ...
    }
}

HttpRequestMessage の使用

using (var client = new HttpClient())
{
  JsonObject postItem = new JsonObject();
  postItem.Add("dummy_id", JsonValue.CreateStringValue("Dummy ID 123"));
  postItem.Add("dummy_content", JsonValue.CreateStringValue("~~~Some dummy content~~~"));
  postItem.Add("dummy_int", JsonValue.CreateNumberValue(1444));

  StringContent content = new StringContent(postItem.Stringify());
  HttpRequestMessage msg = new HttpRequestMessage(HttpMethod.Post, ConnectUrl.Text);
  msg.Content = content;
  msg.Headers.TransferEncodingChunked = true;

  using (var resp = await client.SendAsync(msg))
    {
        // ...
    }
}

問題があるのはコンテンツタイプのヘッダーである可能性があると考えました(最後に確認したところ、プレーンテキストに設定されていましたが、変更する方法が見つかりません)。

ただし、HTTP GET メソッドはすべて正常に機能しています。誰かが私を正しい方向に向けることができれば幸いです。ありがとう!

4

1 に答える 1

2

StringContentオブジェクトに content-type を設定する必要があります。

StringContent content = new StringContent(postItem.Stringify());
content.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("text/json");

またはコンストラクターで直接:

StringContent content = new StringContent(postItem.Stringify(),
    Encoding.UTF8, "text/json");
于 2012-10-25T03:36:10.760 に答える