Asp.net web api 为什么这个WebAPI方法会触发两次?

Asp.net web api 为什么这个WebAPI方法会触发两次?,asp.net-web-api,Asp.net Web Api,我正在试验一个Web API服务。我正在尝试通过GET请求进行文件下载。该方法激发得很好,达到了我的断点。我创建一个响应并返回它。奇怪的是,断点又被击中了。我正在使用Firefox插件海报来测试它。海报上说服务器没有回应。知道为什么会这样吗 以下是响应创建代码: HttpResponseMessage result = this.Request.CreateResponse(HttpStatusCode.OK); result.Content = new StreamContent(stream

我正在试验一个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)

我所有的其他动作都很好。我是否在客户端遗漏了一些东西,比如接受头之类的东西?我现在只是在做一个简单的动作


谢谢

找到了!使用语句似乎是问题所在。在发送结果之前,可能正在处理流。我像这样更新了我的代码,它开始工作:

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

如果我将该方法消化,创建一个OK响应并返回它,它将返回很好的结果。我有一个使用block的实体框架和一个使用block的文件流。我将开始提取代码,看看是否可以隔离问题。顺便说一句,您不需要显式设置ContentLength标头。StreamContent为您设置ContentLength标头。StreamContent检查提供的流,看它是否可以查找流,然后尝试获取流的长度。我无法从您的回答中确切地看出您做了哪些不同?我正在处理一个类似的问题,FireFox对每个请求调用两次操作。任何额外的信息将不胜感激。是的,我没有包括整个方法。很抱歉。所发生的事情是,我对我的流使用了一个“using”块作为SteamContent对象。因此,在请求正确完成之前,流被关闭并处理。我不知道该方法出现两次触发的确切原因,但是跳过流上的using块为我解决了这个问题。@DougDawson您应该编辑您的答案以包含完整的方法(指出using语句已被删除),这样像我这样的新用户就不必深入到注释中去找出为什么这个答案对您有效。:)