IHTTPActionResult Ok <t>(T Content)给出HTTP / 1.1 406 Not Acceptable </t>

时间:2014-08-22 04:29:53

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

当我写回OK()然后它给我201 HTTPStatusCde。但是,当我试图得到一个响应对象作为回报时,它给我406错误。 var response是我想要回复的自定义模式

public IHttpActionResult Post(Order order)
    {
        if (!ModelState.IsValid)
        {
            return BadRequest(ModelState);
        }
        try
        {
            var response = this._orderRepository.AddReturnOrder(order);
            if (response != null)
                return Ok(response);

            return NotFound();
        }
        catch(Exception ex)
        {
            return InternalServerError(ex);
        }       

    }

2 个答案:

答案 0 :(得分:1)

确保您的返回对象可序列化为JSON或XML。否则,控制器方法无法提供根据HTTP状态代码定义所指示的Accept标头可接受的内容:

406不可接受 请求的资源只能根据请求中发送的Accept标头生成不可接受的内容。

由于低代表我无法评论其他信息,您是否可以向我们提供您在回复中尝试返回的对象模型?

答案 1 :(得分:0)

首先,您想通过“var response”返回什么?请注意,对于OData协议,POST请求返回“201 Created”或“204 no content”。如果响应代码是201,则响应主体必须包含创建的资源。因此,在OData Web API中执行POST的标准方法如下:

    // POST odata/Foos
    public IHttpActionResult Post(Foo foo)
    {
        if(!ModelState.IsValid)
        {
            return BadRequest(ModelState);
        }

        FakeData.Instance.Foos.Add(foo);
        return Created(foo);
    }