0

クライアント側でダウンロードする Excel ファイルであるストリームを返すコントローラーに次のコードがあります。

HttpResponseMessage response = new HttpResponseMessage(HttpStatusCode.OK);
MemoryStream memStream = ReportExporter.ExportReport(analystReport);

response.Content = new StreamContent(memStream);
response.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");
response.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment");
response.Content.Headers.ContentDisposition.FileName = saveAsFileName;

return response;

クライアント側でリクエストを行うと、レスポンス メッセージのラッパーが返されます。

StatusCode: 200, ReasonPhrase: 'OK', Version: 1.1, Content: System.Net.Http.StreamContent, Headers:
{
  Content-Type: application/octet-stream
  Content-Disposition: attachment; filename=.xlsx
}

これは Chrome で見られるものであるため、ヘッダーがテキストとして返されるためと思われます。

Content-Type:text/html; charset=utf-8   

いろいろ試してみても、ここで何が起こっているのかわかりません。

4

2 に答える 2

1

この解決策を試してください:

// Copy file to byte array
byte[] file = new byte[memStream.Length];
memStream.Read(file, 0, file.Length);

// Send file
Response.ContentType = "application/octet-stream";
Response.AddHeader("content-disposition", "inline;filename=" + saveAsFileName);
Response.Buffer = true;
Response.Clear();
Response.BinaryWrite(file);
Response.End();

// Return success
return new HttpStatusCodeResult(HttpStatusCode.OK);

Responseはプロパティなので、オブジェクトControllerを作成する必要はありません。HttpResponseMessage

于 2016-05-06T10:00:58.100 に答える