J'ai essayé
Uri uri = HttpContext.Current.Request.Url;
String Host = uri.Scheme + Uri.SchemeDelimiter + uri.Host + ":" + uri.Port;
et cela a bien fonctionné sur ma machine locale, mais lors de la publication sur IIS7, il y a une exception disant
System.Web.HttpException: Request is not available in this context
Quelqu'un sait comment y parvenir?
Lorsque votre application Web démarre, aucune demande HTTP n'est gérée.
Vous souhaiterez peut-être définir la méthode Application_BeginRequest (Object Sender, EventArgs e) dans laquelle le contexte Request est disponible.
Edit: Voici un exemple de code inspiré du blog de Mike Volodarsky auquel Michael Shimmins a lié:
void Application_BeginRequest(Object source, EventArgs e)
{
HttpApplication app = (HttpApplication)source;
var Host = FirstRequestInitialisation.Initialise(app.Context);
}
static class FirstRequestInitialisation
{
private static string Host = null;
private static Object s_lock = new Object();
// Initialise only on the first request
public static string Initialise(HttpContext context)
{
if (string.IsNullOrEmpty(Host))
{
lock (s_lock)
{
if (string.IsNullOrEmpty(Host))
{
var uri = context.Request.Url;
Host = uri.GetLeftPart(UriPartial.Authority);
}
}
}
return Host;
}
}
La réponse acceptée est bonne, mais dans la plupart des cas (si la première demande est une demande HTTP), il vaut mieux utiliser le Session_Start
événement, qui est appelé une fois par utilisateur toutes les 20 minutes environ (je ne sais pas combien de temps la session est valide). Application_BeginRequest
sera renvoyé à chaque demande.
public void Session_Start(Object source, EventArgs e)
{
//Request / Request.Url is available here :)
}
Il suffit de répondre à cette question, donc si quelqu'un décide de faire une recherche sur ce sujet ...
Cela fonctionne au démarrage de l'application dans n'importe quel mode ...
typeof(HttpContext).GetField("_request", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(HttpContext.Current)