2016-07-05 20 views
0

ユーザーが希望のAttractionのリンクをクリックするたびに、コレクションにお気に入りを追加しようとしています - List<Attraction>です。WebApi経由でコレクション(リスト)に追加POST

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のサービスです:

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

それは動作します:ページの角コントローラに続いて

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

次のように

私のAPIコントローラがあります私はブレークポイントを設定しますが、コレクションには1つのアイテムしか追加しません - 最初のアイテムをクリックすると、t彼は最初のアイテムですが、2番目のアイテムをクリックすると2番目のアイテムが追加されますが、最初のアイテムは保持されません。

ブラウザでGetリクエストをlocalhost:xxxx/api/v1/favouritesに送信すると、ウィンドウにはnullと表示されます。これを修正してコレクションの状態が一貫していることを確認するにはどうすればよいですか?

答えて

1

まず、HTTPは状態の少ないものです。これはすべてのリクエストが新しいリクエストであることを意味し、List<Attraction> _favouritesはあなたのコードで常にnullになります。

データを永続化したい場合は、データベースなどの永続ストレージに保存する必要があります。

あなただけのテストのためにAPI をテストする場合は、静的作ることができます - そのちょうど現時点ではテストのための

private static List<Attraction> _favourites; 
+0

おかげで、 - 次のタスクとしてDBへ追加されます。 –

関連する問題