5

我有一个 WebAPI 控制器,需要根据请求下载一些文件,但是当涉及纯文本文件时,它不会给我浏览器的下载请求。它只给我纯文本响应,就像它是 JSON 一样(在我的例子中,它是一个JSONP WebAPI)。

我已经从堆栈(和其他网站)检查了其他问答,但我仍然一无所获:

这是我当前的代码:

var httpResponse = new HttpResponseMessage(HttpStatusCode.OK);
httpResponse.Content = new StreamContent(new MemoryStream(Encoding.UTF8.GetBytes(content)));
httpResponse.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");
httpResponse.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment");
httpResponse.Content.Headers.ContentDisposition.FileName = "speedcam.txt";
return httpResponse;

这是 Chrome 的回应:

缓存控制:无缓存

内容处置:附件;文件名=speedcam.txt

内容长度:17462

内容类型:应用程序/八位字节流

日期:2012 年 8 月 27 日星期一 04:53:23 GMT

过期:-1

杂注:无缓存

服务器:Microsoft-IIS/8.0

X-AspNet-版本:4.0.30319

X-Powered-By:ASP.NET

X-SourceFiles:=?UTF-8?B?TTpcVHJhYmFsaG9cTWFwYVJhZGFyXE1hcGFSYWRhci5XZWJBUEk0XEV4cG9ydGE=?

看起来不错,但整个文件文本都在 Chrome 开发工具“响应选项卡”中。

4

3 回答 3

4

经过大量研究和文本,我发现AJAX 请求无法下载文件的困难方式。感谢这两个答案:

JavaScript/jQuery 通过带有 JSON 数据的 POST 下载文件

使用 Jquery、PHP 下载 Ajax 文件

于 2012-08-30T06:10:21.050 回答
0

无论文本内容如何,​​您的代码都会强制文件表现为应用程序;

httpResponse.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");
于 2012-08-27T05:15:38.477 回答
0

检查 web.config / IIS 中的 mime 扩展

于 2019-06-23T18:05:49.483 回答