使用 api 控制器时的文件下载问题

18 浏览
0 Comments

使用 api 控制器时的文件下载问题

在ASP.NET MVC应用程序中,我有以上的代码用于下载文件。由于我的控制器继承自Controller,所以它运行良好。但是当我将这段代码移到WebAPI控制器时,它在return File处抛出错误。经过分析,我发现我的WebAPI控制器继承自ApiController(system.web.http.api controller),而ApiController中没有File类。是否有任何方法在WebAPI控制器中实现文件下载功能?

我尝试了以下替代代码在WebAPI控制器中,但是在调用它后无法看到下载文件。

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();
}

附:我正在尝试使用AngularJS代码通过Angular服务调用此API。这是在点击下载按钮时调用的。任何样例Angular代码、API控制器代码的帮助或建议都将很有帮助。

0
0 Comments

问题:使用api controller下载文件时出现问题。

原因:使用了错误的HttpResponseMessage创建方法。

解决方法:更改创建HttpResponseMessage的方法来解决问题。

0
0 Comments

问题:使用API控制器下载文件的问题是什么?

原因:代码中的FileProvider.OpenFileProvider.GetLength方法未被正确实现。

解决方法:正确实现FileProvider.OpenFileProvider.GetLength方法,使其能够正确打开文件并获取文件长度。

0
0 Comments

问题出现的原因是:在使用API控制器返回XML文件时,无法正确地下载文件到本地系统。

解决方法是:

1. 在控制器中返回一个XDocument对象,代码如下:

public XDocument returnXMLFile()
{
   var xDoc = XDocument.Load("test.xml");
   return xDoc;
}

2. 修改GlobalConfiguration.Configuration.Formatters,使其返回XML,或者配置客户端设置accept header为"application/xml"。

3. 配置服务器以返回XML而不是其他类型(如JSON),代码如下:

var xml = new System.Net.Http.Formatting.XmlMediaTypeFormatter();
xml.MediaTypeMappings.Add(new QueryStringMapping("format", "xml", "application/xml"));
GlobalConfiguration.Configuration.Formatters.Add(xml);

4. 使用超链接下载XML文件,代码如下:

Download XML

以上就是解决该问题的方法。如果想自定义下载文件的方式,可以参考以下关于使用AngularJS下载文件的问题:

- [Download file from a ASP.NET Web API method using angularjs](https://stackoverflow.com/q/24080018/261542)

- [download csv file from web api in angular js](https://stackoverflow.com/q/20300547/261542)

希望以上解决方法能对您有所帮助。

0