【问题标题】:Can I implement file download using MVC4's ApiController?我可以使用 MVC4 的 ApiController 实现文件下载吗?
【发布时间】:2014-09-25 21:20:24
【问题描述】:

使用常规控制器,我可以通过返回 FileResult 来做到这一点。这似乎不适用于 ApiController。可以做到吗?这样做是正确的吗?

【问题讨论】:

  • Web API 用于 RESTful Web 服务。所以是的,它可以做到,这不是一个坏主意。

标签: asp.net-mvc-4


【解决方案1】:

试试这个。

[HttpGet]    
public HttpResponseMessage Get()
    {
        var file = HttpContext.Current.Server.MapPath("~/Images/accent.png");
        var stream = new FileStream(file, FileMode.Open);
        var content = new HttpResponseMessage(HttpStatusCode.OK)
                         {
                             Content = new StreamContent(stream)
                         };
        content.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");
        return content;
    }

【讨论】:

  • 我们得到这个:The requested resource does not support http method 'GET'.
  • 在方法上方添加HttpGet 属性([HttpGet])。 @teenup
【解决方案2】:

感谢this question

using System.Net;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Web.Http;

namespace Web.Controllers
{
    //usage: /download/report

    [RoutePrefix("download")]
    public class DownloadController : ApiController
    {
        [HttpGet("report")]
        public HttpResponseMessage Report()
        {
            using (var service = new Client())
            {
                var report = service.BuildReport();

                return DownloadResponse(report, "Report.csv");
            }
        }

        private static HttpResponseMessage DownloadResponse(string content, string fileName)
        {
            var downloadContent = new StringContent(content);

            var mediaType = new MediaTypeHeaderValue("application/octet-stream");
            var disposition= new ContentDispositionHeaderValue("attachment") { FileName = fileName };

            downloadContent.Headers.ContentType = mediaType;
            downloadContent.Headers.ContentDisposition = disposition;

            var result = new HttpResponseMessage(HttpStatusCode.OK)
            {
                Content = downloadContent
            };

            return result;
        }
    }
}

【讨论】:

    猜你喜欢
    • 2021-04-10
    • 2014-03-31
    • 1970-01-01
    • 1970-01-01
    • 2011-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多