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;
}