我正在尝试使用Web API服务.我正在尝试通过GET请求进行文件下载.这个方法发射得很好并且达到了我的突破点.我创建一个响应并返回它.然后,奇怪的是,断点再次命中.我正在使用Firefox附加海报来测试它.海报说服务器没有回应.知道为什么会这样吗?
这是响应创建代码:
HttpResponseMessage result = this.Request.CreateResponse(HttpStatusCode.OK);
result.Content = new StreamContent(stream);
result.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");
result.Content.Headers.ContentLength = file.Length;
result.Content.Headers.Expires = new DateTimeOffset(DateTime.Now.AddDays(-1));
result.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("Attachment") { FileName = file.Name };
return result;
Run Code Online (Sandbox Code Playgroud)
唯一重要的变化(我能想到的)是我的WebApiConfig,如下所示:
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional });
Run Code Online (Sandbox Code Playgroud)
我的方法签名如下所示:public HttpResponseMessage GetUpdate(int Id)
我所有的其他行动都很好.我是否在客户端丢失了某些内容,比如接受标题或其他内容?我现在正在做一个简单的GET.
谢谢!
找到了!使用声明似乎是麻烦.在结果发送之前,可能正在处理流.我更新了我的代码,它开始工作:
var stream = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.Read);
result.Content = new StreamContent(stream);
result.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");
result.Content.Headers.ContentLength = stream.Length;
result.Content.Headers.Expires = new DateTimeOffset(DateTime.Now.AddDays(-1));
result.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("Attachment") { FileName = Path.GetFileName(filePath) };
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5546 次 |
| 最近记录: |