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

Asp.net mvc 4 如何为Web API控制器方法指定ContentType,asp.net-mvc-4,asp.net-web-api,Asp.net Mvc 4,Asp.net Web Api,有一个请求对象,获取请求内容类型很容易。但是如何为响应指定内容类型?我的控制器如下所示(为简洁起见,删除了其他操作): 除了内容类型不正确外,这一切正常。我想这样做 Response.ContentType = "text/csv"; 一些研究表明,我们可以键入操作以返回HttpResponseMessage。因此,我的方法的结尾如下所示: var response = new HttpResponseMessage() ; response.Headers.Add("ContentT

有一个请求对象,获取请求内容类型很容易。但是如何为响应指定内容类型?我的控制器如下所示(为简洁起见,删除了其他操作):

除了内容类型不正确外,这一切正常。我想这样做

Response.ContentType = "text/csv";
一些研究表明,我们可以键入操作以返回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
,然后使用
请求。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;
}

啊哈!我需要使用Request.CreateResponse。积分都是你的!(看看MediaTypeFormatter…为什么会有人把它弄得这么复杂?)你可以省去“还”。。。我发现
找不到与媒体类型“text/csv”匹配的格式化程序,它可以写入“String”的实例。
它告诉我需要将生成字符串逻辑放入MediaTypeFormatter,并将其与text/csv关联,然后通过CreateResponse将LINQ结果传递给它。谢谢你帮我渡过了难关。当我需要返回
“text/xml”
时,这对我很有用。旁注:Twilio webhooks不会在我的
ApiController
中处理参数化,因此我要么使用
FormDataCollection
(然后对参数进行foreach),要么从
ApiController
切换回
Controller
,让Twilio填充方法签名中我的命名参数。我使用了后者(非WebApi)并改为使用:
返回内容(result.ToString(),“text/xml”)
// 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;
}