2017-09-26 4 views
2

AngularJSとWebAPIのPluralsightコースを一緒にフォローしています。 PUTを使用してクライアントからサーバーに送信されるデータを保存しようとしていますが、データが保存されていないため、エラーは発生していません。また、ブレークポイントが捕捉されていないため、イベントが正しいサーバー側コードにヒットしません。私はHTTPメソッドのタイプを変更しようとしましたが、このメソッドが必要です。戻されるのはサーバーからの"204: No Content"コードだけです。WebAPIに保存されていないJSONデータ

これは、PUTとの方法のようです。これらのメソッドのブレークポイントはキャプチャされません。

// POST: api/Products 
public void Post([FromBody]Product product) // Creating a product 
{ 
    var productRepository = new ProductRepository(); 
    var newProduct = productRepository.Save(product); 
} 
// PUT: api/Products/5 
public void Put(int id, [FromBody]Product product) // Updating a product 
{ 
    var productRepository = new ProductRepository(); 
    var updatedProduct = productRepository.Save(id, product); 
} 

ProductRepository次のようになります。

var vm = this; 
vm.submit = function() { 
    vm.message = ""; 
    if (vm.product.productID) { 
     vm.product.$update({ id: vm.product.productID }, function (data { 
      console.log(data); 
      vm.message = "Save Complete"; 
     }); 
    } else { 
     vm.product.$save(function (data) { 
      vm.originalProduct = angular.copy(data); 
      vm.message = "Save Complete"; 
     }); 
    } 
}; 

は最後に、productResourceは、そのカスタムサービスです:

internal Product Save(Product product) 
{ 
    // Read in the existing products 
    var products = this.Retrieve(); 
    // Assign a new Id 
    var maxId = products.Max(p => p.ProductID); 

    product.ProductID = maxId + 1; 
    products.Add(product); 

    WriteData(products); 

    return product; 
} 

internal Product Save(int id, Product product) 
{ 
    // Read in the existing products 
    var products = this.Retrieve(); 

    // Locate and replace the item 
    var itemIndex = products.FindIndex(p => p.ProductID == product.ProductID); 
    if (itemIndex > 0) 
    { 
     products[itemIndex] = product; 
    } 
    else 
    { 
     return null; 
    } 

    WriteData(products); 
    return product; 
} 

これはController-As syntaxを使用して(使用されているコントローラの主要部であります次のようになります。

var productResource = function($resource, appSettings) { 
    return $resource(appSettings.serverPath + "/api/Products/:id", null, { 
     'update': { method: 'PUT' } 
    }); 
} 

私はそれがCORSの問題であるかどうかを調べようとしましたが、クラスレベルで有効にしてからではありません。

+0

あなたの投稿であるべきあなたのAPIをチェックし、Web APIのメソッドが表示されないところに置いてください何かを返す。私は彼らが応答を返すべきだと思いますか? –

+0

@ChrisNevill '204:No Content'はデフォルトのレスポンスですが、データを保存するためにカスタムレスポンスを返す必要はありません。それは問題なのです。 – JustinJmnz

+0

デバッガがあなたのブレークポイントに当たらないことを奇妙にします。 IISでデバッグしているときなど、正しいサーバーに接続しているクライアントは、必ずしもそうではありません。私はいつもWeb APIでブレークポイントを使用しています。 –

答えて

1

は、CORS(クロスオリジンリソースの共有)を実装している場合

+0

クラスレベルで有効になっています。 – JustinJmnz

1

はない

var itemIndex = products.FindIndex(p => p.ProductID == product.ProductID); 

var itemIndex = products.FindIndex(p => p.ProductID == id); 
+0

あなたはそうですが、これで問題は解決しません。 – JustinJmnz

+0

'global.asax.cs'であなたのルーティングについて教えてください、それを表示できますか?あなたはコードがブレークポイントを打っていないと言っているからです。 – Shiva

関連する問題