【问题标题】:Adding to a Collection (List) via WebApi POST通过 WebApi POST 添加到集合(列表)
【发布时间】:2016-07-05 21:37:03
【问题描述】:

我正在尝试将收藏夹添加到收藏集 - List<Attraction> 每当用户单击所需 Attraction 的链接时。

我的Api Controller如下:

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();
}

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

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

【问题讨论】:

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


    【解决方案1】:

    首先,HTTP 是无状态的。这意味着每个请求都是一个新请求,List&lt;Attraction&gt; _favourites 在您的代码中将始终为空。

    如果你想持久化数据,你想把它保存在像数据库这样的持久性存储中。

    如果你只是想测试API为了测试,你可以static -

    private static List<Attraction> _favourites;
    

    【讨论】:

    • 谢谢,它现在只是为了测试 - 将作为下一个任务添加到 Db。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-22
    • 2018-05-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多