2013-01-24 29 views
1

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

我可以很容易地添加新的出口控制器,匹配调用到相同的逻辑ApiController行动,但是这意味着,如果我有五个ApiController行动,我将需要五个额外Controller行动。

我想知道如果有一种方法,我可以使一个出口Controller行动,但不知何故将ApiController的细节通过它。

有什么建议吗?

+0

我想你应该在请求中指定Accept头。根据标题中指定的内容类型,将使用服务器上的相应转换器。 – Shrike

+0

[如何在ASP.NET WebAPI中返回一个文件(FileContentResult)]的可能重复(http://stackoverflow.com/questions/26038856/how-to-return-a-file-filecontentresult-in-asp-net- webapi) –

+0

@Dimi我认为你应该将其他问题标记为重复。这个问题在一年多前被问到。 – Kyle

回答

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