2010-06-12 5 views
1

Dans ASP.NET je voudrais créer un lien qui pointe vers un Uri spécifique et envoyer ce lien dans un email à un utilisateur, par exemple quelque chose comme http://www.BlaBla.com/CustomerPortal/Order/9876. Je peux créer la deuxième partie de l'Uri /CustomerPortal/Order/9876 dynamiquement en code-behind. Ma question est: Comment puis-je créer la base Uri http://www.BlaBla.com sans le coder en dur dans mon application? Fondamentalement, je veux avoir quelque chose comme:Comment créer dynamiquement un lien hypertexte qualifié vers une ressource?

http://localhost:1234/CustomerPortal/Order/9876 (on my development machine) 
http://testserver/CustomerPortal/Order/9876 (on an internal test server) 
http://www.BlaBla.com/CustomerPortal/Order/9876 (on the production server) 

Ainsi est-il possible de demander au serveur sur lequel l'application est en cours d'exécution: « S'il vous plaît dites-moi la base de l'application Uri »? Ou de toute autre manière?

Merci d'avance!

Répondre

1

Qu'en est-il de le placer dans le web.config

<configuration> 
    <appSettings> 
     <add key="SendingUrlBase" value="http://www.BlaBla.com"/> 
+0

solution bonne et facile! Je vous remercie! – Slauma

+0

@Slauma vous êtes les bienvenus – Dewfy

2

Quelque chose comme ceci:

HttpContext.Current.Request.Url.GetLeftPart(UriPartial.Authority) + HttpContext.Current.Request.ApplicationPath.TrimEnd('/') 
2

Vous devez mettre une clé dans la configuration, quelque chose quelque part, parce que quand vous pensez à votre application web, ce n'est pas vraiment lié à une URL. Par exemple:

http://localhost:1234/ 
http://yourMachineName:1234/ 
http://yourMachineName.domain.com:1234/ 
http://127.0.0.1:1234/ 

Ce ne sont que quelques façons d'obtenir le même site sur localhost .... qui est-il? Le même problème existe en production, des douzaines de domaines ou IP peuvent pointer vers la même application web, et il utilise des en-têtes d'hôte ou peut-être rien pour le distinguer. Le fait est que, en dehors du contexte d'une requête, le site ne sait pas vraiment à quelle URL il va, pourrait être n'importe quoi, il n'y a tout simplement pas de relation 1: 1 là-bas.

Si vous êtes dans le cadre d'une demande lors de l'envoi d'un e-mail, puis jeter un oeil à HttpRequest.Url, c'est un type Uri et you can see the available properties here.

Vous pouvez faire quelque chose comme ceci:

var host = HttpContext.Current.Url.Host; 
//generate your link using the host 
+0

Merci, bonne explication, surtout le point que la relation entre le site et l'URL n'est pas unique. J'irai probablement avec la proposition de Dewfy d'avoir une solution générale pour les situations où je suis dans le contexte d'une demande ou non. En outre, le courrier dont je parle est déclenché par d'autres utilisateurs que le destinataire et ces utilisateurs peuvent accéder au serveur via une URL de base que je ne veux pas exposer au destinataire du courrier. Donc, je pense que mettre en place quelque chose comme une URL de base "principale" ou "officielle" dans "appSettings" est l'endroit le meilleur et le plus facile. – Slauma

Questions connexes