tag - ¿Cuál es el mejor método en ASP.NET para obtener el dominio actual?
php vs c# (10)
De otra manera:
string domain;
Uri url = HttpContext.Current.Request.Url;
domain= url.AbsoluteUri.Replace(url.PathAndQuery, string.Empty);
Me pregunto cuál es la mejor manera de obtener el dominio actual en ASP.NET?
Por ejemplo:
http://www.domainname.com/subdir/ debería generar http://www.domainname.com http://www.sub.domainname.com/subdir/ debería generar http://sub.domainname.com
Como guía, debería poder agregar una url como "/Folder/Content/filename.html" (por ejemplo, generado por Url.RouteUrl () en ASP.NET MVC) directamente en la URL y debería funcionar.
La misma respuesta que MattMitchell pero con algunas modificaciones. Esto busca el puerto predeterminado en su lugar.
Editar: la sintaxis actualizada y el uso de
Request.Url.Authority
como se sugiere
$"{Request.Url.Scheme}{System.Uri.SchemeDelimiter}{Request.Url.Authority}"
Por qué no usar
Request.Url.Authority
Devuelve todo el dominio Y el puerto.
Aún necesita calcular http o https
Qué tal si:
NameValueCollection vars = HttpContext.Current.Request.ServerVariables;
string protocol = vars["SERVER_PORT_SECURE"] == "1" ? "https://" : "http://";
string domain = vars["SERVER_NAME"];
string port = vars["SERVER_PORT"];
Qué tal si:
String domain = "http://" + Request.Url.Host
Según este enlace, un buen punto de partida es:
Request.Url.Scheme + System.Uri.SchemeDelimiter + Request.Url.Host
Sin embargo, si el dominio es http://www.domainname.com:500, esto fallará.
Algo como lo siguiente es tentador para resolver esto:
int defaultPort = Request.IsSecureConnection ? 443 : 80;
Request.Url.Scheme + System.Uri.SchemeDelimiter + Request.Url.Host
+ (Request.Url.Port != defaultPort ? ":" + Request.Url.Port : "");
Sin embargo, los puertos 80 y 443 dependerán de la configuración.
Como tal, debe usar IsDefaultPort
como en la Respuesta Aceptada anterior de Carlos Muñoz.
Usando UriBuilder:
var relativePath = ""; // or whatever-path-you-want
var uriBuilder = new UriBuilder
{
Host = Request.Url.Host,
Path = relativePath,
Scheme = Request.Url.Scheme
};
if (!Request.Url.IsDefaultPort)
uriBuilder.Port = Request.Url.Port;
var fullPathToUse = uriBuilder.ToString();
¡ADVERTENCIA! Para cualquiera que use Current.Request .Url.Host. Comprenda que está trabajando según la PETICIÓN ACTUAL y que la solicitud actual NO SIEMPRE estará con su servidor y que a veces puede estar con otros servidores.
Entonces, si usa esto en algo como, Application_BeginRequest () en Global.asax, entonces el 99.9% de las veces estará bien, pero el 0.1% podría obtener algo más que el nombre de host de su propio servidor.
Un buen ejemplo de esto es algo que descubrí no hace mucho tiempo. Mi servidor tiende a golpear http://proxyjudge1.proxyfire.net/fastenv de vez en cuando. Application_BeginRequest () maneja con gusto esta solicitud, por lo que si llama a Request.Url.Host cuando realiza esta solicitud, obtendrá de nuevo proxyjudge1.proxyfire.net. Algunos de ustedes podrían estar pensando "no duh", pero vale la pena señalarlo porque fue un error muy difícil de notar ya que solo ocurrió el 0.1% del tiempo: P
Este error me ha obligado a insertar mi host de dominio como una cadena en los archivos de configuración.
Forma simple y corta (admite esquema, dominio y puerto):
var MyUri= Request.UrlReferrer;
// Use this like:
Var fullDomain = myUri.Scheme + Uri.SchemeDelimiter + myUri.Authority;
// Example output: https://www.example.com:5031
// Example output: http://www.example.com:5031
// Example output: https://www.example.com
Request.Url.GetLeftPart(UriPartial.Authority)
Este es un esquema incluido.