Traitement des demandes en ASP.NET MVC
Récemment, j'ai commencé à travailler avec MVC, avant que j'ai utilisé "classique" ASP.NET.
Après l'utilisation de Ruby on Rails (RoR), je me demande comment mettre en œuvre après traitement de la demande en MVC similaire à la façon dont RoR fonctionne. Dans RoR vous utilisez le Post
méthode, de sorte que vous besoin d'une seule fonction de la vue.
Dans ASP.NET MVC-je besoin pour utiliser 2 fonctions distinctes pour GET
et pour POST
, j'ai donc besoin d'initialiser deux fois les mêmes données, et je n'aime pas répéter quelque chose dans mon code.
Comment puis-je vérifier si la demande est POST
dans une méthode?
Mise à jour:
Solution est trouvée: je Demande d'utilisation.HttpMethod.
Merci!
OriginalL'auteur Alex | 2010-02-23
Vous devez vous connecter pour publier un commentaire.
Vous avez seulement besoin de méthodes distinctes pour GET et POST si leurs signatures de méthodes diffèrent, il n'y a aucune raison pourquoi une méthode d'action ne peut pas gérer les méthodes GET et POST.
Si vous avez besoin de savoir si c'était un GET ou POST, vous pouvez vérifier à l'aide de la Demande.HttpMethod dans votre action, mais je conseille à l'aide d'une méthode distincte décorées avec le [AcceptVerbs(HttpVerbs.Post)] attribut tel que suggéré par les autres affiches.
Merci! C'est exactement ce que je cherchais.
OriginalL'auteur JonoW
Je suis tombé sur cette question de vouloir connaître la même chose. Ci-dessous une description détaillée de ma situation et la solution que j'ai utilisé (qui utilise les autres réponses fournies ici). J'ai d'abord essayé d'utiliser les deux méthodes, mais j'ai rencontré un problème lorsque les signatures de méthode de ces méthodes est devenu identique.
J'ai une page qui affiche les données du rapport. En haut de la page, il y a un formulaire avec des champs, qui permettent à l'utilisateur de spécifier les paramètres de rapport telles que la date de début, date de fin, etc.
J'ai d'abord contacté ce par la création de deux méthodes distinctes pour gérer les Obtenir et les méthodes Post. La méthode post serait rediriger le navigateur de la méthode get de sorte que tous les paramètres spécifiés serait ajouté à la chaîne de requête et de sorte que le navigateur ne demande pas à l'utilisateur une boîte de dialogue disant qu'il va renvoyer les données, ils sont entrés si ils actualiser. Note: j'ai réalisé plus tard que j'ai pu accomplir cela en définissant l'attribut method de mon élément de formulaire pour "Obtenir", mais je pense que dans l'idéal, un contrôleur ne devriez pas avoir connaissance de la façon dont un point de vue est mis en œuvre, donc à mon avis n'est pas pertinent.
Que j'ai développé ces deux méthodes, j'ai fini par trouver moi-même dans une situation où les signatures de méthode est devenue identique. En outre, mon code pour ces deux méthodes est devenu presque identique, j'ai donc décidé de les fusionner en une seule et unique méthode et il suffit de cocher la demande verbe, de sorte que je pouvais faire quelque chose de légèrement différent lorsque la demande n'est pas un "Get". Un distillée exemple de mes deux méthodes est illustrée ci-dessous:
Pourquoi suis-je accepter un modèle objet en tant que paramètre à ma méthode get? La raison est que je voulais profiter de la logique de validation déjà intégré dans le modèle objet. Si quelqu'un accède à ma page directement avec tous les paramètres déjà spécifié dans la chaîne de requête, puis je veux aller de l'avant et de récupérer les données du rapport et de l'afficher sur la page. Cependant, si les paramètres spécifiés dans la chaîne de requête est invalide alors je veux aussi les erreurs de validation pour apparaître sur la page. En mettant mon modèle objet en tant que paramètre, le framework MVC va automatiquement essayer de la remplir et la capture des erreurs de validation, sans aucun travail supplémentaire de ma part.
J'ai utilisé les autres réponses postées, pour cette question, afin de créer un RequestHttpVerb de propriété sur une base de contrôleur de classe dans mon projet:
Donc finalement mon consolidés méthode se présente comme suit:
C'est ma solution à ce problème. Je préférerais ne pas avoir à vérifier la Demande.HttpMethod de la propriété afin de déterminer si j'avais besoin pour effectuer la redirection, mais je ne vois pas une autre solution à mon problème. J'aurais été bien avec le maintien de deux méthodes distinctes pour gérer Get et Post demandes, mais la méthode identique signature empêché. J'aurais préféré renommer mon Post d'action de la méthode de gestionnaire d'éviter la signature de la méthode des conflits et à l'utilisation d'un mécanisme pour indiquer au framework MVC que mon renommé de la méthode doit encore faire face à "l'MyReport" de l'action, mais je ne suis pas au courant d'un tel mécanisme dans le framework MVC.
Merci pour la suggestion. Je pense que cela peut être une bonne idée dans de nombreuses situations, peut-être, y compris celui-ci. Dans ce cas, j'ai décidé d'utiliser une méthode unique, car la logique dans les deux cas (Get et Post) était presque identique. Cependant, j'aurais pu utiliser l'approche que vous suggérez par la définition des deux différentes méthodes d'action et en les faisant à la fois appel à une méthode commune qui contient la fonctionnalité réelle.
OriginalL'auteur Dr. Wily's Apprentice
Vous ne cochez pas dans ASP.NET MVC. Vous décorer votre méthode avec les
[AcceptVerbs(HttpVerbs.Post)]
attribut pour indiquer que la méthode s'applique à la poste uniquement, et d'accepter le modèle de la méthode utilisée pour gérer l'après.J'avais fortement suggérer de faire une soluce pour NerdDinner pour comprendre plus au sujet de la ASP.NET framework MVC.
comme gabarit, j'utilise à la fois RoR et ASP.NET MVC, et je ne peux pas aider mais se sentent que la méthode de décoration approche de ce dernier est de loin, de loin supérieur. Vous n'AVEZ pas à l'utiliser, mais vous devriez vraiment. Le code résultant sera beaucoup plus propre, plus facile à lire et à maintenir et moins de bug sur le ventre.
OriginalL'auteur David Morton
Vous pouvez prendre un coup d'oeil à la Demande.HttpMethod propriété.
OriginalL'auteur Darin Dimitrov
Manière correcte de le faire est d'utiliser ModelBinding lors d'une requête Post.
De cette façon, vous n'aurez pas à init de vos données à nouveau.
OriginalL'auteur Amitabh