创建一个自定义带文件的ActionResult
时间: 2024-12-14 11:24:47 浏览: 3
在ASP.NET Core中,`ActionResult`是一个基础类型,用于表示HTTP响应的结果。如果你想创建一个自定义结果类型,特别是涉及文件下载的情况,你可以扩展`Microsoft.AspNetCore.Mvc.ActionResult`,例如:
```csharp
using Microsoft.AspNetCore.Mvc;
using System.IO;
public class DownloadFileResult : ActionResult
{
private readonly string filePath;
private readonly string contentType;
public DownloadFileResult(string filePath, string contentType = "application/octet-stream")
{
this.filePath = filePath;
this.contentType = contentType;
}
public override void ExecuteResult(ControllerContext context)
{
if (context == null)
{
throw new ArgumentNullException(nameof(context));
}
var fileStream = File.OpenRead(filePath);
var fileName = Path.GetFileName(filePath);
context.HttpContext.Response.ContentType = contentType;
context.HttpContext.Response-Disposition = $"attachment; filename={fileName}";
using (var streamProvider = new StreamContent(fileStream))
{
streamProvider.Length = fileStream.Length;
context.HttpContext.Response.Body.WriteAsync(streamProvider.ReadAsByteArrayAsync());
}
}
}
```
在这个例子中,`DownloadFileResult`包含了文件路径和内容类型的属性,并覆盖了`ExecuteResult`方法来设置HTTP响应头并从硬盘读取文件发送给客户端。要使用这个自定义结果,只需将它作为控制器动作返回即可。
阅读全文