加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc-4 – 如何为Web API控制器方法指定ContentType

发布时间:2020-12-16 00:26:51 所属栏目:asp.Net 来源:网络整理
导读:有一个Request对象,获取请求内容类型很容易。但是如何为响应指定内容类型?我的控制器看起来像这样(为简洁起见,其他动作被删除): public class AuditController : ApiController{ // GET api/Audit/CSV [HttpGet,ActionName("CSV")] public string Csv(Gu
有一个Request对象,获取请求内容类型很容易。但是如何为响应指定内容类型?我的控制器看起来像这样(为简洁起见,其他动作被删除):
public class AuditController : ApiController
{   
  // GET api/Audit/CSV
  [HttpGet,ActionName("CSV")]
  public string Csv(Guid sessionId,DateTime a,DateTime b,string predicate)
  {
    var result = new StringBuilder();
    //build a string
    return result.ToString();
  }
}

这是非常正常的,除了它有错误的内容类型。我想这样做

Response.ContentType = "text/csv";

有一点研究表明,我们可以键入Action来返回一个HttpResponseMessage。所以我的方法的结尾将如下所示:

var response = new HttpResponseMessage() ;
  response.Headers.Add("ContentType","text/csv");
  response.Content = //not sure how to set this
  return response;

关于HttpContent的文档是相当稀疏的,有人可以建议我如何将我的StringBuilder的内容变成一个HttpContent对象?

解决方法

您必须将方法的返回类型更改为HttpResponseMessage,然后使用Request.CreateResponse:
// GET api/Audit/CSV
[HttpGet,ActionName("CSV")]
public HttpResponseMessage Csv(Guid sessionId,string predicate)
{
    var result = new StringBuilder();

    //build a string

    var res = Request.CreateResponse(HttpStatusCode.OK);
    res.Content = new StringContent(result.ToString(),Encoding.UTF8,"text/csv");

    return res;
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读