c#使用HttpResponseMessage的webapi下载接口
时间: 2024-10-22 15:13:14 浏览: 56
在C# ASP.NET Web API中,你可以通过HttpResponseMessage对象来构建一个自定义的HTTP响应,用于下载文件。这种方式提供更多的控制,比如设置Content-Disposition头以支持浏览器的自动下载,并可以设置进度指示等。下面是一个简单的下载文件的接口示例:
```csharp
using System.Net.Http;
using System.Threading.Tasks;
using System.IO;
public class MyController : ApiController
{
[HttpGet]
public HttpResponseMessage DownloadFile(string fileName)
{
if (string.IsNullOrEmpty(fileName)) return BadRequest("Please provide a file name.");
// 假设文件路径在这里,实际应用中应从存储或其他地方获取
string filePath = HttpContext.Current.Server.MapPath($"~/Files/{fileName}");
if (!System.IO.File.Exists(filePath))
{
return Request.CreateResponse(HttpStatusCode.NotFound, "File not found.");
}
HttpResponseMessage response = Request.CreateResponse(HttpStatusCode.OK);
response.Content = new StreamContent(new FileStream(filePath, FileMode.Open));
// 设置Content-Disposition头,浏览器会提示用户保存文件
response.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment")
{
FileName = fileName
};
// 可选:设置Content-Length和ETag,以支持缓存和断点续传
response.Content.Headers.ContentLength = System.IO.FileInfo.FromFileName(filePath).Length;
response.Headers.CacheControl = CacheControlHeaderValue.MaxAge(3600);
return response;
}
}
```
这个接口会在接收到GET请求时,读取指定文件并将其内容作为HTTP响应发送出去。当浏览器收到这样的响应时,会自动下载文件。
阅读全文