我正在關注AngularJS和WebAPI上的Pluralsight課程。我試圖使用PUT
保存從客戶端發送到服務器的數據,但數據並未保存,我也沒有收到任何錯誤。此外,它不會觸發正確的服務器端代碼,因爲斷點不會被捕獲。我試圖改變HTTP
方法的類型,但我需要這個。發回的唯一東西是來自服務器的"204: No Content"
代碼。未將JSON數據保存在WebAPI中
這就是PUT
和POST
方法的樣子。任何這些方法的斷點都不會被捕獲。
// 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
看起來像這樣:
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 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是一個自定義的服務,看起來像這樣:
var productResource = function($resource, appSettings) {
return $resource(appSettings.serverPath + "/api/Products/:id", null, {
'update': { method: 'PUT' }
});
}
我試着去看看它是否是CORS
問題,但這不是因爲我在課堂上啓用了它。
您的文章,並把網絡API方法不會出現返回任何東西。我認爲他們應該回復一個迴應? –
@ChrisNevill'204:No Content'是我猜測的默認響應,但它們不需要返回自定義響應來保存數據。這是問題所在。 – JustinJmnz
奇怪的調試器沒有擊中你的斷點。你確定客戶端連接到正確的服務器,而不是IIS當你在IIS Express或類似的調試?我始終在Web API上使用斷點,它們確實有效。 –