c# - api Controller 的文件下载问题

标签 c# asp.net-mvc angularjs asp.net-web-api

public class DefaultController : Controller
{
    // GET: Default
    public ActionResult Index()
    {
        return Download();
    }

    public FileResult Download()
    {
        string xmlString = "my test xml data";
        string fileName = "test" + ".xml";
        return File(Encoding.UTF8.GetBytes(xmlString), "application/xml", fileName);
    }
}

我在 asp.net mvc 应用程序中有上面的代码来下载文件。它工作正常,因为我的 Controller 继承给了 Controller。但是,当我将此代码移动到 Webapi Controller 时,它会在返回 File 时抛出错误。经过分析我发现我的webapi中的controller继承了ApiController(system.web.http.api controller)。我发现ApiController中没有File类。是否有任何选项可以在 webapi Controller 中实现下载文件功能?

我在 webapi Controller 中尝试了以下替代代码,但是一旦我调用它就看不到下载文件。

public HttpResponseMessage DownloadConstructedXmlFile()
        {
            var result = new HttpResponseMessage(HttpStatusCode.OK);
            string xmlContent = "My test xml data";
            //var serializer = new XmlSerializer(typeof(xmlContent));

            var builder = new StringBuilder();
            using (var writer = new StringWriter(builder))
            {
                // serializer.Serialize(writer, xmlContent);
                result.Content = new StringContent(xmlContent, Encoding.UTF8, "application/xml");
                result.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment")
                {
                    FileName = string.Format("test.xml")
                };
               // return result;
            }

            return new HttpResponseMessage();
        }

PS:我正在尝试使用 angularjs 代码通过 angular.service 调用此 api。这是在单击下载按钮时调用的。 API Controller 代码中的任何示例 Angular 代码或帮助或建议都会有所帮助。

最佳答案

这是一个更简单的例子:

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

   namespace WebApplication1.Controllers
   {
    public class ValuesController : ApiController
    {
        // GET: api/Values
        public HttpResponseMessage Get()
        {
            var xmlString = "<xml><name>Some XML</name></xml>";
            var result = Request.CreateResponse(HttpStatusCode.OK);
            result.Content = new StringContent(xmlString, Encoding.UTF8, "application/xml");
            result.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment")
            {
                FileName = "test.xml"
            };

            return result;
        }
    }
   }

关于c# - api Controller 的文件下载问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31887729/

相关文章:

c# - 是否有适用于 ASP.NET 的免费或付费的就地可编辑语法荧光笔控件?

c# - 从 C# 调用 Oracle 存储过程?

c# - 在静态 Assets 和基于 CDN 的 Assets 之间切换以进行开发和部署的最佳方式

asp.net-mvc - 我的 Razor View 的自定义基本页面类型,如何使用城堡温莎 Autowiring 属性?

javascript - 如何手动设置Kendo Grid的总计数?

javascript - Mongodb嵌套文件更新?

c# - 要通过单击按钮刷新表单中的 ListView ,请单击另一种表单

c# - System.Windows.pdb 未加载 - Windows Phone

javascript - 对多个滚动事件执行一次操作并防止滚动

javascript - 在 Angular JS 1.6 中处理 JSONP 响应