ASP.Net MVC:导出ApiController操作的结果

时间:2013-01-24 17:01:24

标签: c# asp.net json asp.net-mvc-4

在我的应用程序中,我有一些网格,每个网格都从ApiController操作中获取数据源。我想为用户添加一个选项,将这些网格导出为CSV,PDF,Excel等。编写代码将数据源转换为预期的格式不是问题。问题是我想编写可重用的代码。目前,我对每个网格都有一个单独的操作。

我可以非常轻松地添加一个新的导出控制器,其中的匹配操作调用与ApiController相同的逻辑,但这意味着如果我有五个ApiController操作,我将需要另外五个{{1}行动。

我想知道是否有一种方法可以进行单一导出Controller操作,但不知何故将Controller的详细信息传递给它。

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

这是我发现的:

我可以将其与StreamContent一起使用,而不是将ByteArrayContent作为内容返回。

[HttpGet]
public HttpResponseMessage Generate()
{
    var stream = new MemoryStream();
    // processing the stream.

    var result = new HttpResponseMessage(HttpStatusCode.OK)
    {
        Content = new ByteArrayContent(stream.GetBuffer())
    };
    result.Content.Headers.ContentDisposition =
        new System.Net.Http.Headers.ContentDispositionHeaderValue("attachment")
    {
        FileName = "CertificationCard.pdf"
    };
    result.Content.Headers.ContentType =
        new MediaTypeHeaderValue("application/octet-stream");

    return result;
}