通过WebApi POST添加到集合(列表)

时间:2016-07-05 21:37:03

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

我想在用户点击所需List<Attraction>的链接时,将收藏夹添加到收藏集Attraction

我的Api控制器如下:

public class FavouritesController : ApiController
{
    private List<Attraction> _favourites;

    private readonly IRepository _repo;

    public FavouritesController(IRepository repo)
    {
        _repo = repo;
    }

    public IEnumerable<Attraction> Get()
    {
        return _favourites;
    }

    [HttpPost]
    public IHttpActionResult Add(int id)
    {
        if (_favourites == null)
        {
            _favourites = new List<Attraction>();
        }

        var attraction = _repo.FindAttractionById(id);

        if (attraction == null)
        {
            return BadRequest();
        }

        _favourites.Add(attraction);

        return Ok();
    }

这是我的AngularJS服务:

function addToFavourites(id) {
    $http.post("/api/v1/favourites/" + id)
        .success(function(response) {
           //Success
        })

然后在页面的Angular控制器中:

$scope.addToFavourites = function() {
    dataService.addToFavourites(this.attraction.id);
    $scope.Favourites = dataService.getFavourites();
}

当我设置断点时它起作用 - 但只添加一个项目到集合 - 所以如果我点击第一个项目它会添加第一个项目,但是如果点击第二个项目它会添加第二个项目,但是不保留首先。

如果我在浏览器中向Get发出localhost:xxxx/api/v1/favourites请求,则只在窗口中显示null。我该如何解决这个问题并确保收集的状态保持一致?

1 个答案:

答案 0 :(得分:1)

首先,HTTP状态较少。这意味着每个请求都是一个新请求,List<Attraction> _favourites在您的代码中始终为空。

如果要保留数据,则希望将其保留在数据库等持久存储中。

如果您只是想测试API 以便进行测试,您可以静态 -

private static List<Attraction> _favourites;