【发布时间】:2015-10-31 11:43:46
【问题描述】:
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 应用程序中有上面的代码来下载文件。它工作正常,因为我的控制器被继承到控制器。但是当我将此代码移动到 Webapi 控制器时,它会在返回 File 时引发错误。经过分析我发现我在webapi中的控制器继承了ApiController(system.web.http.api控制器)。我发现 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();
}
PS:我正在尝试使用 angularjs 代码通过 angular 服务调用此 api。这是在单击下载按钮时调用的。 api控制器代码或建议中的任何示例角度代码或帮助都会有所帮助。
【问题讨论】:
标签: c# asp.net-mvc angularjs asp.net-web-api