我正在尝试为Azure功能的响应设置媒体类型格式化程序以返回Excel文件。我不想要外部文件绑定,因为我想将输出流式传输到浏览器进行下载,而不是将文件写入blob或google工作表等。在其他环境(例如WebApi)之前,我已经为此目的使用了EPPlus库和WebApiContrib.Formatting.Xlsx。我能够导入包并在我的函数中引用它们,但是我无法成功添加格式化程序并将其应用于响应。
是否可以获取对HttpConfiguration对象的引用以添加格式化程序?我尝试将XlsxMediaTypeFormatter添加到CreateResponse调用,但由于某种原因,它无法强制转换为MediaTypeFormatter。如果我只是尝试设置MIME类型,它表示没有可用的格式化程序。
这是我的测试功能:
using System.Net;
using System.Net.Http.Headers;
using System.Net.Http.Formatting;
using WebApiContrib.Formatting.Xlsx;
public static async Task<HttpResponseMessage> Run(HttpRequestMessage req, TraceWriter log)
{
var testData = new List<TestItemDto>
{
new TestItemDto
{
Id = System.Guid.NewGuid().ToString(),
Name = "Test Item 1"
},
new TestItemDto
{
Id = System.Guid.NewGuid().ToString(),
Name = "Test Item 2"
}
};
//var excelMediaType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
var formatter = new XlsxMediaTypeFormatter(headerHeight: 25f, freezeHeader: true);
var response = req.CreateResponse<List<TestItemDto>>(HttpStatusCode.OK, testData, (MediaTypeFormatter)formatter);
response.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment")
{
FileName = "TestData.xlsx"
};
return response;
}
public class TestItemDto
{
public string Id { get; set; }
public string Name { get; set; }
}
我收到错误:
error CS0030: Cannot convert type 'WebApiContrib.Formatting.Xlsx.XlsxMediaTypeFormatter' to 'System.Net.Http.Formatting.MediaTypeFormatter'
我的project.json文件:
{
"frameworks": {
"net46":{
"dependencies": {
"EPPlus": "3.1.3.3",
"WebApiContrib.Formatting.Xlsx" : "1.0.1"
}
}
}
}
答案 0 :(得分:0)
这不是最佳答案,因为它绕过MediaTypeFormatter并直接创建响应内容。但是,我能够通过抛弃XlsxMediaTypeFormatter,直接使用EPPlus库创建excel工作簿,并将其流式传输到浏览器(使用与上面相同的DTO和测试集合)来实现它:
UIVisualEffectView
如果有人能回答实际问题(例如如何使用MediaTypeFormatter),我会保留问题。