我有一个Azure Web应用程序,该应用程序使用FileStreamResult返回一个二进制文件。效果很好...
FileStreamResult fsr = File(blobStream, System.Net.Mime.MediaTypeNames.Application.Octet, "testfile.bin");
return fsr;
我将此代码复制到另一个Web应用程序,返回了完全相同的Blob项,它返回的“损坏”文件几乎大了2倍(65K对117K)。这两个应用程序都使用相同版本的.Net,相同的Azure帐户,相同的Azure存储帐户,响应标头相同...但是必须有所不同!
更新:FileStreamResult在缓冲区中具有正确的数据/大小。如果我将数据从FileStream中复制出来(返回之前),就可以了。所以FileStreamResult是正确的;生成响应时会发生问题。有关如何转换FileStreamResult的信息。我也尝试过ActionResult,同样的问题。
更新2:仍然无法弄清楚,但是...它将非UTF-8字符替换为EF BF BD unicode替换字符。我不知道为什么。我认为应用程序/八位字节流的内容类型将指示未解释数据。也找不到为什么一个Web应用程序执行此操作,而另一个Web应用程序不执行此操作。
答案 0 :(得分:0)
您可以将软件包Swashbuckle.AspNetCore
更新到最新版本4.0.1
。
这里是您可以参考的类似issue。
答案 1 :(得分:0)
最终成功...证明基本控制器上有一个ActionFilterAttribute强制进行编码。