如何从Web API aciton以指定的'Accept'格式返回内容

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

解决方案实际上很简单, 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;
}
链接地址: http://www.djcxy.com/p/20411.html

上一篇: How to return content in specified 'Accept' format from Web API aciton

下一篇: Add WebAPI Project or use webHttpBinding?