¿Cuál es el mejor método en ASP.NET para obtener el dominio actual?
-
09-06-2019 - |
Pregunta
Me estoy preguntando cuál es la mejor manera de obtener el dominio actual es en ASP.NET?
Por ejemplo:
http://www.domainname.com/subdir/ debe rendir http://www.domainname.com http://www.sub.domainname.com/subdir/ debe rendir http://sub.domainname.com
Como una guía, yo debería ser capaz de añadir una url como "/Folder/Content/filename.html" (es decir que así como en los generados por la Url.RouteUrl() en ASP.NET MVC) directamente en la URL y se debe trabajar.
Solución
Misma respuesta que MattMitchell pero con alguna modificación.Esto comprueba que el puerto por defecto en su lugar.
Editar:Actualizado de la sintaxis y el uso de
Request.Url.Authority
como se sugiere
$"{Request.Url.Scheme}{System.Uri.SchemeDelimiter}{Request.Url.Authority}"
Otros consejos
Como por en 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 se producirá.
Algo como la siguiente es tentador para resolver este:
int defaultPort = Request.IsSecureConnection ? 443 : 80;
Request.Url.Scheme + System.Uri.SchemeDelimiter + Request.Url.Host
+ (Request.Url.Port != defaultPort ? ":" + Request.Url.Port : "");
Sin embargo, el puerto 80 y 443 dependerá de la configuración.
Como tal, usted debe utilizar IsDefaultPort
como en el Aceptado Respuesta por encima de Carlos Muñoz.
Request.Url.GetLeftPart(UriPartial.Authority)
Este se incluye el esquema.
ADVERTENCIA! Para cualquier persona que utiliza Actual.Solicitud.Dirección Url.Host.Entiendo que usted está trabajando basado en la PETICIÓN ACTUAL y que la solicitud actual no va a estar SIEMPRE con su servidor y, a veces puede ser con otros servidores.
Así que si usted utiliza esta en algo como, Application_BeginRequest() en el Global.asax, a continuación, el 99,9% del tiempo que va a estar bien, pero 0.1% que usted podría conseguir algo distinto de su propio nombre de host del servidor.
Un buen ejemplo de esto es algo que he descubierto no hace mucho.Mi servidor tiende a golpear http://proxyjudge1.proxyfire.net/fastenv de vez en cuando.Application_BeginRequest() con mucho gusto maneja esta solicitud, de forma que si Solicitud de llamada.Dirección Url.Host cuando se trata de hacer esta solicitud usted recibirá de vuelta proxyjudge1.proxyfire.net.Algunos de ustedes pueden estar pensando "no duh" pero vale la pena destacar, porque era muy difícil error a notar desde que sucedió sólo el 0,1% del tiempo :P
Este error me ha obligado a insertar mi host de dominio como una cadena en el fichero de configuración.
¿Por qué no usar
Request.Url.Authority
Se devuelve la totalidad del dominio Y el puerto.
Usted todavía necesita la figura de http o https
Simple y corto manera (es compatible con esquemas, el dominio y el puerto):
Uso Request.GetFullDomain()
// Add this class to your project
public static class HttpRequestExtensions{
public static string GetFullDomain(this HttpRequestBase request)
{
var uri= request?.UrlReferrer;
if (uri== null)
return string.Empty;
return uri.Scheme + Uri.SchemeDelimiter + uri.Authority;
}
}
// Now Use it like this:
Request.GetFullDomain();
// Example output: https://www.example.com:5031
// Example output: http://www.example.com:5031
// Example output: https://www.example.com
De otra manera:
string domain;
Uri url = HttpContext.Current.Request.Url;
domain= url.AbsoluteUri.Replace(url.PathAndQuery, string.Empty);
Cómo acerca de:
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"];
El Uso De 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();
Cómo acerca de:
String domain = "http://" + Request.Url.Host