Comment puis-je détecter au démarrage de l'application qu'un client ne prend pas en charge les verbes DELETE
et PUT
et surcharger automatiquement le verbe POST?
Sur le serveur, comment puis-je rediriger les verbes POST surchargés dans les bonnes actions?
Dites que j'ai une demande DELETE qui est redéfinie, comment puis-je appeler la fonction appropriée dans le contrôleur qui correspond à l'action?
Je suppose que je devrais utiliser un filtre d'action et utiliser la réflexion pour inspecter les attributs qui correspondent à ma fonction (dans cet exemple: DeleteFoo(Guid Id)
).Comment surcharger automatiquement DELETE et PUT s'ils ne sont pas disponibles par le client?
Répondre
Vous ne pouvez pas détecter si un client prend en charge ou non ces verbes. Aussi pour les navigateurs qui ne supportent pas les verbes PUT
et DELETE
dans les formulaires html, vous pouvez utiliser l'assistant HttpMethodOverride dans votre formulaire qui ajoutera un champ caché au formulaire qui demandera à l'exécution d'invoquer l'action du contrôleur approprié malgré le fait que sous les couvertures une demande POST
est envoyée.
<% using (Html.BeginForm("Destroy", "Products", new { id = "123" }, FormMethod.Post)) { %>
<%: Html.HttpMethodOverride(HttpVerbs.Delete) %>
<input type="submit" value="Delete" />
<% } %>
qui appellera l'action décorée avec [HttpDelete]
:
[HttpDelete]
public ActionResult Destroy(int id)
{
// TODO: delete product
TempData["message"] = "product deleted";
return RedirectToAction("index");
}
L'important ici est que le contrôleur ne doit pas occuper ou dépendent de ce que les verbes du client prend en charge. Si vous concevez vos contrôleurs d'une manière RESTful en utilisant les verbes et les noms appropriés, il existe des techniques telles que celles montrées ici qui permettent aux clients qui ne supportent pas les verbes PUT
et DELETE
d'invoquer ces actions.
- 1. Comment faire REST avec PUT et DELETE
- 2. Les méthodes HTML5 PUT/DELETE ne fonctionnent pas dans Chrome?
- 3. Django/piston + Silverlight, PUT/DELETE?
- 4. service WCF REST hébergé dans IIS ne prend pas en charge PUT et DELETE
- 5. Zend_Http_Client :: PUT ne fonctionne pas
- 6. Application HTTP pour GET, PUT, DELETE
- 7. Comment activer et utiliser HTTP PUT et DELETE avec Apache2 et PHP?
- 8. Les modifications apportées aux préférences d'application ne sont pas sauvegardées ou ne sont pas disponibles immédiatement?
- 9. Comment vérifier si le service et le serveur sont disponibles?
- 10. Comment puis-je m'assurer que mes pages Web ne sont pas modifiées par le client final?
- 11. méthodes surcharger et surcharger
- 12. Les tests ne sont pas disponibles dans Visual Studio 2008?
- 13. Les éléments ajoutés avec appendTo() ne sont pas immédiatement disponibles
- 14. Pourquoi les URL du projet Django ne sont-elles pas toutes disponibles pour le client de test Django?
- 15. javac ne compile pas le code Java, même si les pots sont présents et disponibles
- 16. Certaines fonctions spéciales d'Apache Camel ne sont pas disponibles
- 17. Y a-t-il une raison pour ne pas utiliser HTTP PUT et DELETE dans une application Web?
- 18. BlockingQueue: put() et isEmpty() ne fonctionnent pas ensemble?
- 19. La méthode Sinatra PUT ne fonctionne pas?
- 20. Les aides Zend_View ne sont pas disponibles en appelant manuellement $ view-> render(): comment le réparer?
- 21. Pourquoi utiliser les méthodes HTTP PUT et DELETE au lieu du POST?
- 22. form_remote_tag ne s'exécutera pas: méthode =>: put
- 23. Windows Le service ne démarre pas automatiquement
- 24. méthodes créées par attr_accessor ne sont pas disponibles pour les classes sous
- 25. `delete` pas clairement et pointeurs
- 26. s3-put ne parvient pas à envoyer le fichier
- 27. Quelle est la meilleure façon de "fausser" les méthodes DELETE et PUT en utilisant JAX-RS?
- 28. Les méthodes HTTP PUT et DELETE présentent-elles des avantages en termes de performances?
- 29. Comment vérifier les ressources externes sont disponibles
- 30. La fonction CakePHP delete() ne fonctionne pas
Mais qu'en est-il des demandes ajax? –
Et à propos d'eux? Les requêtes AJAX prennent en charge les verbes PUT et DELETE, vous n'avez donc pas besoin du champ caché supplémentaire. Ils seront automatiquement envoyés à l'action du contrôleur approprié en fonction du verbe HTTP que vous utilisez: '$ .ajax ({url: '/ products/destroy/123', tapez: 'DELETE', succès: fonction (résultat) {alert ('produit supprimé');}}); ' –
Pourquoi les requêtes ajax prennent en charge PUT et DELETE et les requêtes de formulaire normales ne le font pas? –