ASP.NET MVC Post de @Url.action()
J'ai le contrôleur suivant généré automatiquement par asp.net
//
//POST: /Account/LogOff
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult LogOff()
{
AuthenticationManager.SignOut();
return RedirectToAction("Index", "Home");
}
Maintenant, j'ai un bouton de déconnexion. Actuellement, il ressemble à ceci:
<div class="userdrop">
<ul>
<li><a href="@Url.Action("Manage", "Account")">Profile</a></li>
<li><a href="@Url.Action("LogOff", "Account")">Logout</a></li>
</ul>
</div><!--userdrop-->
Mais il ne fonctionne pas et je devine que c'est parce qu'il est un Post de la méthode d'action.
Comment pourrais-je aller sur "déconnexion" ?
[MODIFIER]
Pourquoi est-il auto-produit comme un Http Post? Est-il plus sûr de cette façon? N'est-il pas envoyer le cookie avec elle quand il se déconnecte?
Vous devez vous connecter pour publier un commentaire.
À l'aide d'un formulaire au lieu d'un point d'ancrage:
On pourrait appeler le CSS des assistants de style ce bouton ressemble à une ancre si vous le souhaitez. Mais le sémantiquement correcte de l'élément dans ce cas est un formulaire html qui permet d'envoyer un POST verbe.
submit
code du bouton - et comme une note ici, j'ai eu d'importants problèmes avecAntiForgeryToken
sur l'équilibrage de charge les environnements d'hébergement partagés. Connaissez-vous une solution pour ce problème? C'est pourquoi j'ai arrêté y compris dans mes formes et je ne l'aime pas du tout. Il est probable que le commettant ainsi.machineKey
dans leWeb.config
de sorte que c'est cohérente à travers toutes les instances de l'application. J'ai eu à faire que de résoudre un problème différent, le "rester connecté" problème. Je me demande maintenant ce que - quels sont les risques associés?Il n'y a aucune raison pour que ce soit un
HttpPost
. Je sais que c'est générée de cette façon, mais vous n'êtes pas vraimentPOST
ing toutes les données. Il suffit de supprimer l'attribut et il fonctionnera comme est.Maintenant, si vous voulez qu'il fonctionne avec le
HttpPost
ensuite, vous aurez besoin de mettre cela dans uneForm
et d'en faire unesubmit
bouton ousubmit
la formeonclick
.Vous êtes en droit qu'il a à faire avec
[HttpPost]
attribut, qui ne permettent que de HTTP POST de demandes. Régulier des ancres HTML déclencher des requêtes HTTP GET, à cet effet, votre exemple ne fonctionne pas.Une solution pourrait être quelque chose comme ceci:
Je crois que c'est proche de ce que le modèle par défaut dans MVC4.
Remarquez comment nous avons également passer le long de l'anti faux jeton, requis par le
[ValidateAntiForgeryToken]
attribut.jQuery
😀