如何在Web API中使用IHttpActionResult返回属性

时间:2015-06-18 14:59:44

标签: asp.net-mvc angularjs post asp.net-web-api

我有一个类似的模型类(从EF生成):

public partial class Point
{
    public int Id { get; set; }
    public int First { get; set; }
    public int Second { get; set; }
    public int Total { get; set; }
}

和我的控制器(ApiController)中的Post方法(从Angular调用),如下所示:

[ResponseType(typeof(Point))]
    public IHttpActionResult PostPoint(Point points)
    {
        if (!ModelState.IsValid)
        {
            return BadRequest(ModelState);
        }

        points.Total = points.First + points.Second;

        db.ScoreBoard.Add(points);

        db.SaveChanges();

        return CreatedAtRoute("DefaultApi", new { id = points.Id }, points);
    }

这将返回整个points对象,我的POST调用将具有Response该对象的所有属性。

现在我想要做的只是返回Total属性,所以我尝试将PostPoint的返回值更改为:

return CreatedAtRoute("DefaultApi", new { id = points.Id }, points.Total);

但是这样做会将空Response返回到Angular的POST来电。

Angular post-method看起来像这样:

this.post = function (Point) {
    var request = $http({
        method: "post",
        url: "/api/PointsAPI",
        data: JSON.stringify(Point)
    });
    return request;
}

我如何仅返回Total对象的points属性?

1 个答案:

答案 0 :(得分:0)

它将为空,因为您正在返回原始数据类型。你的Total属性只是一个数字,所以当angular解析响应时,它期望一个对象,它所看到的只是" 2" (如果你的总数是2)。因此,将它包装在一个对象中,angular将能够解析它。

return CreatedAtRoute("DefaultApi", new { id = points.Id }, new { points.Total });

这将在您的身体中返回{ "Total" : 2 }。现在,angular将拥有一个具有Total属性的对象。