如何为Web API控制器方法指定ContentType

Pet*_*one 26 asp.net-mvc-4 asp.net-web-api

有一个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();
  }
}
Run Code Online (Sandbox Code Playgroud)

这工作正常,但它的内容类型错误.我想这样做

Response.ContentType = "text/csv";
Run Code Online (Sandbox Code Playgroud)

一个小小的研究表明我们可以输入Action来返回一个HttpResponseMessage.所以我的方法的结尾看起来像这样:

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

关于HttpContent的文档相当稀疏,任何人都可以建议我如何将我的StringBuilder的内容放入HttpContent对象中?

hai*_*770 41

您必须将方法的返回类型更改为HttpResponseMessage,然后使用Request.CreateResponse:

// GET api/Audit/CSV
[HttpGet, ActionName("CSV")]
public HttpResponseMessage Csv(Guid sessionId, DateTime a, DateTime b, 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;
}
Run Code Online (Sandbox Code Playgroud)