IHttpActionResult返回项目,Json(项目)和Ok(项目)之间的区别

时间:2014-04-20 22:15:52

标签: asp.net asp.net-web-api asp.net-web-api2

在ASP.NET WebApi 2中,以下内容之间有什么区别:

public <IHttpActionResult> GetItem(Guid id)
{
    // ... code ..., Item result = ....
    return result;
}

public <IHttpActionResult> GetItem(Guid id)
{
    // ... code ..., Item result = ....
    return Json(result);
}


public <IHttpActionResult> GetItem(Guid id)
{
    // ... code ..., Item result = ....
    return Ok(result);
}

2 个答案:

答案 0 :(得分:25)

此代码返回result不会编译,因为result没有实现IHttpActionResult ...

public <IHttpActionResult> GetItem(Guid id)
{
    // ... code ..., Item result = ....
    return result;
}

返回Json()始终返回HTTP 200,结果为JSON格式,无论传入请求的Accept标头中的格式是什么。

public <IHttpActionResult> GetItem(Guid id)
{
    // ... code ..., Item result = ....
    return Json(result);
}

返回Ok()会返回HTTP 200,但结果将根据Accept请求标头中指定的内容进行格式化。

public <IHttpActionResult> GetItem(Guid id)
{
    // ... code ..., Item result = ....
    return Ok(result);
}

答案 1 :(得分:1)

只是对先前解释的补充:

您的功能的返回类型为:IHttpActionResult

因此,期望方法返回IHttpActionResultHttpResponseMessageHttpResponseMessage的接口。 Ok(result)具有有用的属性,例如标题,内容和状态代码。

因此,HttpResponseMessage会返回Ok Json(result)状态代码和内容,在这种情况下是结果。同时,HttpResponseMessage将对象转换为json格式,即序列化,并将其作为内容放在 Order.find({patient:req.user._id}) .populate({ path:'doctor', populate:{ path:'specialization', select:'-_id' }, }) 中。

使用ASP.NET的web api的最佳之处在于它创建了通过抽象传递Http响应的简单方法。最糟糕的是,在实际使用相对简单的方法之前需要一些理解。

Here是关于血清化和json的更多信息

Here更多关于IHttpActionResult的信息