114 votes

Création d'une URL dans le contrôleur .NET MVC

Je dois pouvoir créer un lien dans l'action sur le contrôleur pour envoyer un courrier électronique. Quelle est la meilleure pratique pour ce faire? Je ne veux pas le construire moi-même au cas où mes itinéraires changeraient.

Devrais-je avoir une vue pour chaque email et le rendre et l'envoyer? Cela pourrait être un bon moyen de le faire.

208voto

Gidon Points 8758

Si vous voulez seulement obtenir le chemin d’une action donnée, utilisez UrlHelper :

 UrlHelper u = new UrlHelper(this.ControllerContext.RequestContext);
string url = u.Action("About", "Home", null);
 

si vous voulez créer un lien hypertexte:

 string link = HtmlHelper.GenerateLink(this.ControllerContext.RequestContext, System.Web.Routing.RouteTable.Routes, "My link", "Root", "About", "Home", null, null);
 

Intellisense vous donnera la signification de chacun des paramètres.

21voto

andresfiuba Points 96

Si vous avez besoin de l'URL complète (par exemple pour l'envoyer par courrier électronique), envisagez d'utiliser l'une des méthodes intégrées suivantes:

Avec cela, vous corrigez de route à utiliser pour construire de url:

 Url.RouteUrl("OpinionByCompany", new RouteValueDictionary(new{cid=newop.CompanyID,oid=newop.ID}), HttpContext.Request.Url.Scheme, HttpContext.Request.Url.Authority)
 

Ici l'URL est construite après que le moteur de route détermine celui qui est correct:

 Url.Action("Detail","Opinion",new RouteValueDictionary(new{cid=newop.CompanyID,oid=newop.ID}),HttpContext.Request.Url.Scheme, HttpContext.Request.Url.Authority)
 

Dans les deux méthodes, les 2 derniers paramètres spécifient le protocole et le nom d'hôte.

Cordialement.

12voto

Moshe Points 1724

J'ai eu le même problème, et il semble Gidon, en réponse a un petit défaut: il génère une URL relative, qui ne peut pas être envoyé par la poste.

Ma solution ressemble à ceci:

string link = HttpContext.Request.Url.Scheme + "://" + HttpContext.Request.Url.Authority + Url.Action("ResetPassword", "Account", new { key = randomString });

De cette façon, une URL complète est généré, et il fonctionne même si l'application est à plusieurs niveaux de profondeur sur le serveur d'hébergement, et utilise un port autre que le port 80.

EDIT: j'ai trouvé cela utile.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by: