gpt4 book ai didi

.net - Asp.net Web API - 如何为自定义 CSV 媒体类型格式化程序设置文件名

转载 作者:行者123 更新时间:2023-12-03 18:19:04 24 4
gpt4 key购买 nike

我已经在我的 ASP.Net Web API 项目中成功实现了一个 Csv Media Type Formatter。我能够以 Csv 格式返回结果。然而,生成的文件名是没有扩展名的“部分”。

理想情况下,我希望能够在 Controller 中设置此文件名,但能够全局添加扩展名是最低要求。

以下是我找到的例子

覆盖 OnGetResponseHeaders - 我不认为这是当前版本中的一个选项。
http://forums.asp.net/t/1782973.aspx/1?Setting+response+and+content+headers+esp+ContentDisposition+inside+a+MediaTypeFormatter

根据那篇文章,这应该有效

public override IEnumerable<KeyValuePair<string, string>> OnGetResponseHeaders(Type objectType, string mediaType, HttpResponseMessage responseMessage)
{
return new[] { new KeyValuePair<string, string>("Content-Disposition", "attachment; filename=testing.csv") };
}

然而,Visual Studio 说“没有合适的覆盖方法”并且当我将它添加到我的自定义 Csv Formatter 时不会编译。

从 Controller 返回 HttpMessageResponse - How to set downloading file name in ASP.NET Web API
然而,这似乎只是插入现有的服务器文件,这将使 Csv 序列化脱离混合。以下是使这种方法起作用的尝试:
public HttpResponseMessage Get(string id)
{
var response = new HttpResponseMessage();

if (id == "test")
{
var data = GetTestData();
response.StatusCode = HttpStatusCode.OK;
response.Content = new StreamContent(data);
response.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment");
response.Content.Headers.ContentDisposition.FileName = "testorama.csv";
return response;
}

return null;
}

这里的问题是 new StreamContent() 期待一个流 - 有没有办法获取自定义 Csv Formatter 创建的当前流?

最重要的是,如何为首先序列化为 Csv 格式的结果集设置文件名?

解决方案

谢谢克劳迪奥 - 这让我朝着正确的方向前进。您发布的内容有一些变化:
  • 我是从 BufferedMediaTypeFormatter 为我的自定义 Csv 派生的
    格式化程序并使用 SetDefaultContentHeaders 我不得不改为
    派生自 MediaTypeFormatter。
  • SetDefaultContentHeaders 接受具有类型的 mediaType 参数
    MediaTypeHeaderValue 而不是字符串。

  • 这是最终的代码:
    public override void SetDefaultContentHeaders(Type type, HttpContentHeaders headers, MediaTypeHeaderValue mediaType)
    {
    base.SetDefaultContentHeaders(type, headers, mediaType);
    headers.Add("Content-Disposition", "attachment; filename=testorama.csv");
    }

    最佳答案

    覆盖方法 SetDefaultContentHeaders在你的 MediaTypeFormatter 上

    public override void SetDefaultContentHeaders(
    Type type, HttpContentHeaders headers, string mediaType)
    {
    base.SetDefaultContentHeaders(type, headers, mediaType);
    headers.Add("Content-Disposition", "attachment; filename=yourname.csv");
    }

    关于.net - Asp.net Web API - 如何为自定义 CSV 媒体类型格式化程序设置文件名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12325467/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com