Je suis un cours Pluralsight sur AngularJS et WebAPI ensemble. J'essaie d'enregistrer les données envoyées du client au serveur en utilisant PUT
, mais les données ne sont pas enregistrées et je ne reçois aucune erreur. En outre, il n'atteint pas le code côté serveur correct car les points d'arrêt ne sont pas interceptés. J'ai essayé de changer le type de méthode HTTP
, mais j'ai besoin de celui-ci. La seule chose renvoyée est un code "204: No Content"
du serveur.Les données JSON ne sont pas enregistrées dans WebAPI
Voici à quoi ressemblent les méthodes PUT
et POST
. Les points d'arrêt dans l'une de ces méthodes ne seront pas capturés.
// 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
ressemble à ceci:
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;
}
Ceci est la partie principale du contrôleur qui est utilisé (en utilisant 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";
});
}
};
Enfin, productResource est un service personnalisé ressemble à ceci:
var productResource = function($resource, appSettings) {
return $resource(appSettings.serverPath + "/api/Products/:id", null, {
'update': { method: 'PUT' }
});
}
J'ai essayé de voir si c'est un problème CORS
, mais ce n'est pas le cas depuis que je l'ai activé au niveau de la classe.
Votre message et mettre les méthodes de l'API Web ne semblent pas pour retourner n'importe quoi. Je pense qu'ils devraient retourner une réponse? –
@ChrisNevill Le '204: No Content' est la réponse par défaut je suppose, mais ils n'ont pas besoin de retourner une réponse personnalisée afin de sauvegarder les données. Quel est le problème? – JustinJmnz
Étrange les débogueurs ne pas atteindre vos points d'arrêt. Vous êtes sûr que les clients se connectent au bon serveur, pas IIS lorsque vous déboguez dans IIS Express ou quelque chose comme ça? J'utilise des points d'arrêt avec l'API Web tout le temps et ils fonctionnent. –