0

我目前正在开发一个MediaTypeFormatter来处理来自Web Api控制器的csv文件。如何添加 contentHeaders.Add(“content-disposition”,“attachment; filename = filename.csv”);如何使用MediaTypeFormatter覆盖ASP.NET Web Api中的响应头

截至目前,我有以下代码,但内容处置标题被忽略。我想提供一个链接,向用户显示save dialod。例如。/api/students?格式= csv

public class ServiceStackCSVFormatter : MediaTypeFormatter 
{ 

    public ServiceStackCSVFormatter() 
    {    
     //this.AddQueryStringMapping("format","csv", "text/csv"); 
     this.AddQueryStringMapping("format", "csv", "text/html"); 
     SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/csv"));   
    } 

    public override bool CanWriteType(Type type) 
    { 
     if (type == null) 
      throw new ArgumentNullException("type"); 

     return true; 
    } 

    public override Task WriteToStreamAsync(Type type, object value, Stream writeStream, HttpContent content, TransportContext transportContext) 
    { 
     content.Headers.Clear(); 
     content.Headers.Add("content-disposition", "attachment; filename=result.csv");   
     var task = Task.Factory.StartNew(() => CsvSerializer.SerializeToStream(value, writeStream)); 
     return task; 
    } 

    public override Task<object> ReadFromStreamAsync(Type type, Stream readStream, System.Net.Http.HttpContent content, IFormatterLogger formatterLogger) 
    { 
     var task = Task<object>.Factory.StartNew(() => CsvSerializer.DeserializeFromStream(type, readStream)); 
     return task; 
    } 
    public override bool CanReadType(Type type) 
    { 
     return true; 
    } 

} 

回答

1

你目前有什么已经太晚了,无法修改标题(标题首先发送,然后发送正文)。您可以覆盖名为SetDefaultContentHeaders的方法来修改传出标题。

+0

谢谢!有效! –

相关问题