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.

¿Fue útil?

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
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top