【发布时间】:2018-09-20 23:22:35
【问题描述】:
在我基于 ASP.NET MVC 和 Angular 构建的项目中,我使用了一种方法并从数据库中检索存储的文件,没有任何问题:
[HttpPost]
public ActionResult GetFile(int id)
{
var file= service.GetFileById(id);
if (file.Data != null)
{
return File(file.Data, file.MimeType, file.Name);
}
return new EmptyResult();
}
另一方面,当我想在我的 Web Api Controller 中使用相同的方法时,没有这种 File() 方法,我在查看 stackoverflow 上的 15-20 解决方案后尝试使用以下方法:
[Route("api/Generate/{id}")]
[AcceptVerbs("GET", "POST")]
public HttpResponseMessage Generate(int id)
{
var data = service.GetFileByName(id);
var stream = new MemoryStream();
var result = new HttpResponseMessage(HttpStatusCode.OK)
{
Content = new ByteArrayContent(stream.ToArray())
};
result.Content.Headers.ContentDisposition =
new System.Net.Http.Headers.ContentDispositionHeaderValue("attachment")
{
FileName = data.Name
};
result.Content.Headers.ContentType =
new MediaTypeHeaderValue(data.MimeType);
return result;
}
但是,下载的文件没有扩展名,我还没有找到一个有用的方法来从 mime 类型获取文件扩展名,如下所示(此方法从 application/pdf 获取文件类型,但如果 mime 无法获取类型是 application/octet-stream。那么,有什么想法可以为 Web Api 解决这个问题吗???
【问题讨论】:
-
扩展名不是已经在文件名中了吗?
-
不,扩展名不是
标签: c# asp.net-mvc file asp.net-web-api