Ich möchte eine kleine Hilfsmethode schreiben, die die Basis-URL der Site zurückgibt. Folgendes habe ich mir ausgedacht:
public static string GetSiteUrl()
{
string url = string.Empty;
HttpRequest request = HttpContext.Current.Request;
if (request.IsSecureConnection)
url = "https://";
else
url = "http://";
url += request["HTTP_HOST"] + "/";
return url;
}
Gibt es einen Fehler, an den Sie denken können? Kann jemand dies verbessern?
c#
asp.net
uri
httprequest
Jaggu
quelle
quelle
Antworten:
Versuche dies:
quelle
Das ist es ;)
quelle
Die beliebte
GetLeftPart
Lösung wird in der PCL-Version vonUri
leider nicht unterstützt .GetComponents
Wenn Sie jedoch Portabilität benötigen, sollte dies den Trick tun:quelle
Ich glaube, dass die obigen Antworten nicht berücksichtigen, wenn sich die Website nicht im Stammverzeichnis der Website befindet.
Dies ist ein für WebApi-Controller:
quelle
Für mich sieht @ warlock's hier wie die beste Antwort aus, aber ich habe dies in der Vergangenheit immer verwendet.
Oder in einem WebAPI-Controller;
Dies ist praktisch, damit Sie auswählen können, welches Escape-Format Sie möchten. Ich bin mir nicht sicher, warum es zwei so unterschiedliche Implementierungen gibt, und soweit ich das beurteilen kann, geben diese Methode und @ warlocks in diesem Fall genau das gleiche Ergebnis zurück, aber es sieht so aus, als
GetLeftPart()
würde dies beispielsweise auch für Nicht-Server-Uri-ähnlichemailto
Tags funktionieren .quelle
Dies ist eine viel narrensicherere Methode.
quelle
/
wenn Sie in einer Anwendungsdomäne hosten,Ich gehe mit
quelle
Basierend auf dem, was Warlock geschrieben hat, habe ich festgestellt, dass das virtuelle Pfadstammverzeichnis benötigt wird, wenn Sie nicht im Stammverzeichnis Ihres Webs gehostet werden. (Dies funktioniert für MVC Web API-Controller.)
quelle
Ich verwende folgenden Code von Application_Start
String baseUrl = Path.GetDirectoryName(HttpContext.Current.Request.Url.OriginalString);
quelle
Das funktioniert bei mir.
Wenn Sie also auf Ihren Domainnamen zugreifen möchten, sollten Sie den Anwendungsnamen angeben, wenn:
====================================
Für die dev.x.us/web
es gibt diesen starken Text zurück
quelle
Bitte verwenden Sie den folgenden Code
quelle
quelle
Sie könnten möglicherweise den Port für Nicht-Port 80 / SSL hinzufügen?
etwas wie:
und das im Endergebnis verwenden?
quelle
Request.Url.Authority
wird die Portnummer enthalten, wenn es nicht Standard ist