用c sharp写一个webapi,提供文件下载功能
时间: 2024-05-02 07:22:30 浏览: 99
好的,您可以参考以下步骤:
1. 创建一个 C# WebAPI 项目。
2. 在 WebAPI 控制器中定义一个 GET 方法,该方法接受文件名作为参数。
3. 在 GET 方法中,使用 System.IO.File 类获取要下载的文件的物理路径,然后使用 System.Net.Http.HttpResponseMessage 类对其进行封装。
4. 在 HttpResponseMessage 对象的 Content 属性中,使用 System.Net.Http.StreamContent 类创建一个可将文件发送给客户端的流。
5. 将 HttpResponseMessage 对象返回给客户端。
以下是示例代码:
```csharp
using System.IO;
using System.Net;
using System.Net.Http;
using System.Web.Http;
public class FileController : ApiController
{
public HttpResponseMessage Get(string filename)
{
HttpResponseMessage httpResponseMessage = new HttpResponseMessage(HttpStatusCode.OK);
string filePath = HttpContext.Current.Server.MapPath("~/App_Data/" + filename);
if (!File.Exists(filePath))
{
httpResponseMessage.StatusCode = HttpStatusCode.NotFound;
httpResponseMessage.Content = new StringContent("File Not Found");
return httpResponseMessage;
}
FileStream filestream = File.Open(filePath, FileMode.Open);
httpResponseMessage.Content = new StreamContent(filestream);
httpResponseMessage.Content.Headers.ContentDisposition = new System.Net.Http.Headers.ContentDispositionHeaderValue("attachment");
httpResponseMessage.Content.Headers.ContentDisposition.FileName = filename;
httpResponseMessage.Content.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/octet-stream");
return httpResponseMessage;
}
}
```
注意:此示例中的文件存储在 WebAPI 项目中的 App_Data 文件夹中。调用该方法时,将文件名传递给该方法即可下载文件。例如,使用 http://localhost/api/file?filename=test.txt URL 下载名为 test.txt 的文件。
阅读全文