Question

Comment puis-je obtenir systématiquement l'URL absolue ou la racine de base ou le nom de base du site, que celui-ci se trouve dans un répertoire virtuel ou que mon code se trouve dans la structure de répertoires? J'ai essayé toutes les variables et fonctions auxquelles je peux penser et je n'ai pas trouvé le bon chemin.

Je souhaite pouvoir obtenir l'URL du site actuel, à savoir http://www.example.com ou s'il s'agit d'un répertoire virtuel, http://www.example.com/DNN/

Voici certaines des choses que j'ai essayées et le résultat. Le seul élément contenant l'intégralité de l'élément souhaité ( http: // localhost: 4471 / DNN441 ) est Request. .URI.AbsoluteURI:

  • Request.PhysicalPath: C: \ WebSites \ DNN441 \ Default.aspx
  • Request.ApplicationPath: / DNN441
  • Request.PhysicalApplicationPath: C: \ WebSites \ DNN441 \
  • MapPath: C: \ WebSites \ DNN441 \ DesktopModules \ Articles \ Templates \ Default.aspx
  • RawURL: /DNN441/ModuleTesting/Articles/tabid/56/ctl/Details/mid/374/ItemID/1/Default.aspx
  • Request.Url.AbsoluteUri: http: // localhost: 4471 / DNN441 / Default.aspx
  • Request.Url.AbsolutePath: /DNN441/Default.aspx
  • Request.Url.LocalPath: /DNN441/Default.aspx Request.Url.Host: localhost
  • Request.Url.PathAndQuery: /DNN441/Default.aspx?TabId=56 & Amp; ctl = Détails & Amp; mid = 374 & Et ItemID = 1
Était-ce utile?

La solution

En lisant la réponse fournie dans le blog de Rick Strahl, j'ai trouvé que ce dont j'avais vraiment besoin était assez simple. Vous devez d’abord déterminer le chemin relatif (ce qui pour moi était la partie la plus facile), puis le transmettre à la fonction définie ci-dessous:

VB.NET

Public Shared Function GetFullyQualifiedURL(ByVal s as string) As String
   Dim Result as URI = New URI(HttpContext.Current.Request.Url, s)
   Return Result.ToString
End Function

C #

public static string GetFullyQualifiedURL(string s) {
    Uri Result = new Uri(HttpContext.Current.Request.Url, s);
    return Result.ToString();
}

Autres conseils

La réponse acceptée suppose que la demande en cours se trouve déjà sur le serveur / la racine virtuelle. Essayez ceci:

Request.Url.GetLeftPart(UriPartial.Authority) + Request.ApplicationPath

Il existe d'excellentes discussions et idées sur le blog de Rick Strahl .

EDIT: Je devrais ajouter que les idées fonctionnent avec ou sans un HttpContext valide.

EDIT2: Voici le commentaire / code spécifique sur cet article qui répond à la question

Trouvé ce code ici :

string appPath = null;

appPath = string.Format("{0}://{1}{2}{3}",
    Request.Url.Scheme,
    Request.Url.Host,
    Request.Url.Port == 80 ? string.Empty : ":" + Request.Url.Port,
    Request.ApplicationPath);

Avez-vous essayé AppSettings.RootUrl qui est généralement configuré dans le fichier web.config?

Parlez-vous des liens?

Si tel est le cas, cette opération <a href='/'>goes to root</a> vous mènera au fichier par défaut de la racine Web.

Maintenant, pour le côté client, faisant, en passant " ~ / " à la méthode Control :: ResolveUrl vous fournira ce que vous recherchez. ( http://msdn.microsoft.com /en-us/library/system.web.ui.control.resolveurl.aspx )

Je n'ai aucun moyen de valider cela pour le moment, mais avez-vous essayé & "Request.Url.AbsoluteUri &"; d'une autre machine?

Il me semble que, dans la mesure où votre ordinateur est concerné, son navigateur demande à localhost.

Je peux me tromper mais je pense que la requête est relative au navigateur et non au serveur Web.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top