4

次のようなWeb APIコントローラーメソッドがあります。

[HttpPost]
public string PostMethod(int id)
{
  Stream downloadStream = Service.downloadStream(id);  
  JavaScriptSerializer jsonSerializer = new JavaScriptSerializer();
  string output  = jsonSerializer.Serialize(downloadStream);
}

私はこのメソッドを Java アプレットから次の URL で呼び出しています。

http://localhost1/api/PostMethod/1

行番号3で次のように例外が発生します。

「このストリームではタイムアウトはサポートされていません。'ObjectContent`1' タイプは、コンテンツ タイプ 'application/json; charset=utf-8' の応答本文をシリアル化できませんでした。」

これに対する可能な解決策は何ですか?Webapiコントローラーメソッドを介してストリームをJSONオブジェクトとして送信する方法は?

4

1 に答える 1

2

Web Apiはコンテンツネゴシエーションをサポートしているため、オブジェクトをシリアル化する必要はなく、オブジェクトを返すだけです。

Web Apiは、クライアントが要求する内容に応じて、XMLまたはJsonをクライアントに自動的に返します。

content-type: application/json

Webブラウザは通常XMLを取得しますが、javascriptJsonとして取得します。Javaアプレットには、上記のヘッダーが必要です(実際にはすでに送信されているように見えます)。

[HttpPost]
public string PostMethod(int id)
{
   Stream downloadStream = Service.downloadStream(id);  
   System.IO.MemoryStream memoryStream = new System.IO.MemoryStream();
   downloadStream.CopyTo(memoryStream);
   return memoryStream.ToString();
}

これは、downloadStreamメソッドが返すものに大きく依存します。

于 2012-10-12T19:19:04.923 に答える