2016-04-20 11 views
0

.csvファイルを返すだけです。Webアプリケーションの応答でByteArraycontent型をシリアル化できません

それはなぜHttpResponseMessageなくIHttpActionResult

で動作しますか?

public async Task<HttpResponseMessage> ExportLeads() 
     { 
      byte[] bytes = new byte[2]; 
      var result = new HttpResponseMessage(HttpStatusCode.OK) { Content = new ByteArrayContent(bytes) }; 
      result.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream"); 
      result.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment") { FileName = "test.csv" }; 
      return result; 
     } 

ではない

public async Task<IHttpActionResult> ExportLeads() 
     { 
      byte[] bytes = new byte[2]; 
      var result = new HttpResponseMessage(HttpStatusCode.OK) { Content = new ByteArrayContent(bytes) }; 
      result.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream"); 
      result.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment") { FileName = "test.csv" }; 
      return Content(HttpStatusCode.OK, result); 
     } 

エラー =>

The type "System.Net.Http.ByteArrayContent" can not be serialized. 
Annotate it with the Attribut "DataContractAttribute"... 
+0

あなたは、特に 'NegotiatedContentResult'を返すようにしたいですか?そうでなければ、 'return Content(HttpStatusCode.OK、result)'とは対照的に 'return this.ResponseMessage(result)'を試してください。 – strickt01

+0

これはうまくいった、ありがとう! – HelloWorld

+0

偉大な、その旨の回答を掲載しました。 – strickt01

答えて

1

Content(HttpStatusCode.OK, result)ワークスNegotiatedContentResultが返されます。そのため、ファイルの内容をフォーマットするには、ContentNegotiatorFormattersを設定する必要があります。あなただけ(HttpResponseMessageを返すあなたのコードごとに)コンテンツ内のバイナリ配列として生のCSVを返すようにしたいのように、あなたは以下を使用する必要があります。

return this.ResponseMessage(result)

関連する問題