ventajas tag net for desventajas asp asp.net asp.net-mvc domain-name

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.