2009-08-03 7 views
38

Necesito obtener el host fuera del objeto Request. ¿Qué propiedad debo usar y por qué?Host vs DnsSafeHost

De MSDN:

Uri.DnsSafeHost Propiedad

una cadena que contiene la parte anfitrión no literal de la URI que es adecuado para la resolución DNS ; o la cadena de host original no guardada , si es ya adecuada para la resolución.

vs

Uri.Host Propiedad

una cadena que contiene el nombre de host. Este suele ser el nombre de host DNS o la dirección IP del servidor.

Mi prueba ha sido con el servidor de desarrollo ASP.NET. Ambos siempre devuelven localhost. Incluso cuando puse 127.0.0.1, ambos devuelven localhost.

Leyendo, la propiedad DnsSafeHost manejará las direcciones IPv6, así como la conversión de Unicode a ASCII si es necesario. También puede representar IRI e IDN. Aunque actualmente no me importan estas cosas, ¿debería usar la propiedad DnsSafeHost para estar seguro?

Respuesta

44

Aplicar DnsSafeHost a la URL si tiene la intención de enviar el nombre de host resultante a un servidor DNS por su cuenta. El DNS originalmente era un protocolo solo ASCII (and a subset of ASCII at that). Las URL actuales permiten secuencias de caracteres en la parte del host de una URL que no se puede enviar directamente a un servidor DNS. Ejemplos son:

  • bracket-enclosed IPv6 addresses. DnsSafeHost suelta los corchetes.

  • Nombres de dominio no ASCII, no ingleses. DnsSafeHost (opcionalmente) usa RFC 3987 IRI para normalizar los caracteres y convierte el carácter que no es ASCII a la codificación IDN, Punycode.

  • ¿Quién sabe qué URL permitirán en el futuro? La aplicación puede sobrevivir nuestras suposiciones de lo que está bien en una URL. DnsSafeHost agrega un grado de resistencia allí.

Si se necesita mostrar el nombre de host para el usuario, utiliza la propiedad Host lugar.

+5

Eso tiene sentido. No pensé en cómo Host podría usarse como nombre para mostrar, y DnsSafeHost para ser utilizado programáticamente. ¡Gracias por la respuesta clara y concisa! –