我正在关注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上使用断点,它们确实有效。 –