在带有.Net的WebApi中使用Swagger下载文档时出错

时间:2019-05-31 09:18:32

标签: c# .net asp.net-web-api ms-word swagger

当WebApi中的控制器返回文档时, Swagger 出现问题。

我正在使用Xceed.Word.Net库在docx中生成MemoryStream文件。

MemoryStream ms = new MemoryStream();
var doc = Xceed.Words.NET.DocX.Create(ms, DocumentTypes.Document);
...
doc.Save();

生成后,WebApi的响应量如下:

var result = new HttpResponseMessage(HttpStatusCode.OK) { Content = new ByteArrayContent(ms.ToArray()) };
result.Content.Headers.ContentLength = ms.Length;

result.Content.Headers.ContentType = new MediaTypeHeaderValue("application/force-download");
result.Content.Headers.ContentDisposition = new System.Net.Http.Headers.ContentDispositionHeaderValue("attachment")
{
    FileName = filename,
    Size = ms.Length,
    CreationDate = DateTimeOffset.Now
};
return result;

然后,我从浏览器向我的api发出请求(GET操作),它没有问题地返回文档,但是如果该请求是使用Swagger发出的(我具有最新版本),请点击出现的链接要下载并保存文档,我无法打开它,因为它已损坏。

我已经比较了以两种方式生成的文档,问题是保存时的编码。我不知道Swagger的工作方式或使用的编码方式,但是内容编码错误,Word抛出错误消息说它已损坏。

其他人也有同样的问题吗?您知道是否可以通过在WebApi响应中包含某些内容来解决该问题?

我希望你的回答。

0 个答案:

没有答案