2009-08-03 13 views
38

Ho bisogno di estrarre l'host dall'oggetto Richiesta. Quale proprietà dovrei usare e perché?Host vs DnsSafeHost

Da MSDN:

Uri.DnsSafeHost Proprietà

String che contiene la parte escape host del URI che è adatto per la risoluzione DNS; oppure la stringa di host senza escape originale , se è già disponibile per la risoluzione .

vs

Uri.Host Proprietà

String contenente il nome host. Di solito è il nome host DNS o l'indirizzo IP del server.

Il mio test è stato con il server di sviluppo ASP.NET. Entrambi restituiscono sempre localhost. Anche quando inserisco 127.0.0.1, entrambi restituiscono localhost.

La lettura su, la proprietà DnsSafeHost gestirà gli indirizzi IPv6, nonché la conversione da Unicode a ASCII se necessario. Può anche rappresentare IRI e IDN. Anche se attualmente non mi interessa queste cose, dovrei semplicemente usare la proprietà DnsSafeHost per essere al sicuro?

risposta

44

Applicare DnsSafeHost all'URL se si intende inviare il nome host risultante a un server DNS da soli. Il DNS era in origine un protocollo solo ASCII (and a subset of ASCII at that). Gli URL attuali consentono sequenze di caratteri nella parte host di un URL che non può essere inviato direttamente a un server DNS. Esempi:

  • bracket-enclosed IPv6 addresses. DnsSafeHost rilascia le parentesi.

  • Nome di dominio non inglese, non inglese. DnsSafeHost (facoltativamente) utilizza RFC 3987 IRI per normalizzare i caratteri e converte il carattere non ASCII nella codifica IDN, Punycode.

  • Chi sa quali URL consentiranno in futuro? L'applicazione potrebbe superare le nostre supposizioni su ciò che va bene in un URL. DnsSafeHost aggiunge un grado di resilienza lì.

Se è necessario visualizzare il nome host per l'utente, utilizzare invece la proprietà Host.

+5

Questo ha senso. Non ho pensato a come Host potrebbe essere utilizzato il nome visualizzato e DnsSafeHost per essere utilizzato in modo programmatico. Grazie per la risposta chiara e concisa! –