我有一个Web API控制器操作,我想设置响应标头,并以Accept标头指定的请求格式返回内容。
不幸的是,如果我使用输入操作或IHttpActionResult
作为操作的返回类型,我就无法设置标题,但内容协商会有效。
我必须返回HttpResponseMessage
才能在操作中指定标题,但我需要指定ObjectContent
的格式化程序。虽然我只支持XML或JSON类型,但我仍然不想在丑陋的条件下进行刻录以检查返回类型应该是什么。
有没有办法很好地完成这项工作,没有过滤器,属性和自定义泛型返回类型?
public HttpResponseMessage Post([FromBody]QueryModel model)
{
var data = _svc.Query(model);
var resp = new HttpResponseMessage(HttpStatusCode.OK);
// set headers
resp.Content = new ObjectContent(typeof(ResponseModel), data, /* CAN YOU NOT GUESS */);
return resp;
}
答案 0 :(得分:0)
解决方案实际上很简单,Request
对象使用CreateResponse()
方法来制作HttpResponseMessage
。
public HttpResponseMessage Post([FromBody]QueryModel model)
{
var data = _svc.Query(model);
var resp = Request.CreateResponse(HttpStatusCode.OK, data);
resp.Content.Headers.Add("X-Moo", "Boo");
return resp;
}