Frage

Wie kann ich konsequent die absolute, vollqualifizierten Wurzel oder Basis-URL der Website, unabhängig davon, ob die Website in einem virtuellen Verzeichnis ist und unabhängig davon, wo mein Code in der Verzeichnisstruktur? Ich habe jede Variable und Funktion versucht, die ich denken kann und nicht einen guten Weg gefunden.

Ich möchte in der Lage, die URL der aktuellen Seite zu bekommen, das heißt http://www.example.com oder wenn es ein virtuelles Verzeichnis, http://www.example.com/DNN/


Hier einige der Dinge, die ich versucht habe, und das Ergebnis. Der einzige, der das ganze Stück enthält, die ich will ( http: // localhost: 4471 / DNN441 ) anfordern .URI.AbsoluteURI:

  • Request.PhysicalPath: C: \ WebSites \ DNN441 \ Default.aspx
  • Request.ApplicationPath: / DNN441
  • Request.PhysicalApplicationPath: C: \ WebSites \ DNN441 \
  • MapPath: C: \ WebSites \ DNN441 \ DesktopModules \ Artikel \ 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&ctl=Details&mid=374&ItemID=1
War es hilfreich?

Lösung

durch die Antwort Beim Lesen in Rick Strahl Blog bereitgestellt fand ich, was ich brauchte wirklich ganz einfach war. Zuerst müssen Sie den relativen Pfad bestimmen (was für mich war der einfache Teil), und das unten definiert in die Funktion übergeben:

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();
}

Andere Tipps

Die akzeptierte Antwort geht davon aus, dass die aktuelle Anforderung ist bereits auf dem Server / virtuellen Root. Versuchen Sie folgendes:

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

Es gibt einige ausgezeichnete Diskussion und Ideen auf Rick Strahl Blog

EDIT:. Ich mag hinzufügen, dass die Ideen mit oder ohne gültigen Httpcontext arbeiten

EDIT2: Hier ist der Kommentar verfasst / code auf dass Post, die die Frage

Antworten

Gefunden dieser Code hier :

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);

Haben Sie AppSettings.RootUrl versucht, die in der Regel in der Datei web.config konfiguriert ist?

Sprechen Sie über die zur Verwendung als Links?

Wenn ja, dann dieses <a href='/'>goes to root</a> Weise werden Sie in die Standarddatei des Web-Root übernehmen.

Nun, für Client-Seite tun, vorbei an „~ /“ an die Control :: ResolveUrl Methode werden Sie das, was Sie suchen. ( http://msdn.microsoft.com /en-us/library/system.web.ui.control.resolveurl.aspx )

Ich habe keine Möglichkeit, dies zur Zeit zu überprüfen, aber haben Sie von einer anderen Maschine „Request.Url.AbsoluteUri“ versucht?

Es kommt zu mir, dass so weit wie Ihre Maschine betrifft es ist Browser von localhost angefordert wird.

ich aber falsch sein könnte, aber ich denke Anfrage an den Browser relativ und nicht die der Webserver.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top