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
の問題であるかどうかを調べようとしましたが、クラスレベルで有効にしてからではありません。
あなたの投稿であるべきあなたのAPIをチェックし、Web APIのメソッドが表示されないところに置いてください何かを返す。私は彼らが応答を返すべきだと思いますか? –
@ChrisNevill '204:No Content'はデフォルトのレスポンスですが、データを保存するためにカスタムレスポンスを返す必要はありません。それは問題なのです。 – JustinJmnz
デバッガがあなたのブレークポイントに当たらないことを奇妙にします。 IISでデバッグしているときなど、正しいサーバーに接続しているクライアントは、必ずしもそうではありません。私はいつもWeb APIでブレークポイントを使用しています。 –