如何返回指定的内容'接受'来自Web API aciton

时间:2018-02-20 09:29:18

标签: c# asp.net-web-api

我有一个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;
}

1 个答案:

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