为什么这个Web API方法会触发两次?

时间:2013-06-05 20:53:25

标签: asp.net-web-api

我正在尝试使用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;

唯一重要的变化(我能想到的)是我的WebApiConfig,如下:

config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional });

我的方法签名如下所示:public HttpResponseMessage GetUpdate(int Id)

我所有的其他行动都运转良好。我是否在客户端丢失了某些内容,比如接受标题或其他内容?我现在正在做一个简单的GET。

谢谢!

1 个答案:

答案 0 :(得分:5)

发现它!使用声明似乎是麻烦。在结果发送之前,可能正在处理流。我更新了我的代码并开始工作:

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) };