Bestimmen Website absolut, vollständig qualifizierte URL in asp.net
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
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
AntwortenGefunden 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.