Quelqu'un peut-il me dire comment obtenir le nom de domaine des serveurs dans ASP.NET? ( Merci pour les redits, mais surtout, ils sont sur le nom DNS du serveur, ce dont j'ai besoin est le nom de domaine. Par exemple, lorsque je me connecte via l'authentification Windows I, je tapez le domaine \ utilisateur et j'ai besoin de ce "domaine" p> environnement.userdomainName code> retourne "IIS Apppool" String) P>
8 Réponses :
Essayez la classe system.net.dns code>, il dispose de nombreuses méthodes utiles telles que GetHostenry I.e.:
var entry = System.Net.Dns.GetHostEntry("google.com"); // or vice-versa...
var name = System.Net.Dns.GetHostEntry("127.0.0.1"); // localhost ;)
Alors, je suppose que la question suivante est de savoir comment obtenez-vous l'adresse WAN de votre serveur? Et qu'en est-il du scénario où vous utilisez l'hébergement partagé et que vous n'avez donc pas de propriété intellectuelle dédiée à votre domaine?
Je dois avoir mal compris les "noms de domaine des serveurs", les serveurs, au pluriel, signifiais que vous souhaitez effectuer des requêtes de nom de domaine.
Vous aurez besoin de l'extraire de l'objet de la demande:
HttpContext.Current.Request.Url.Host
+1: C'est la manière la plus propre. Il renvoie simplement le nom de domaine, filtrant des ports, http / https, chemin, querystring, etc.
Eh bien, il renvoie le nom de domaine utilisé pour accéder au serveur, c'est probablement bien, mais il peut s'agir d'un des nombreux noms différents utilisés pour accéder au serveur.
Il existe un problème spécifique à votre question, il peut y avoir plus d'un nom de domaine pour une adresse IP spécifique.
Comme Tinister indiqué, vous pouvez utiliser P>
HttpContext.Current.Request.Url.Host
Les entreprises d'hébergement typiques partagées et revendeurs utilisent la même boîte pour plusieurs clients et configureront donc leurs serveurs Web pour choisir le bon site en fonction du nom d'hôte. Si une personne a changé de fichier hôte pour essayer de tromper le code de cette manière, il est probable que le serveur Web ne rejette que la demande initiale en raison du nom d'hôte inconnu. Bien que j'avoue que je n'ai jamais vraiment essayé de faire ça ...
C'est vrai; J'ai travaillé pour une entreprise où le même serveur IIS a hébergé plusieurs noms de domaine dans cette mode. Je souligne simplement que, en inspectant la propriété "hôte", vous obtenez ce que l'utilisateur saisit, et il n'y a pas de garantie que c'est vraiment une valeur correcte.
Cela me semble que vous essayez de trouver le nom de domaine de l'utilisateur. Puisque vous demandez l'environnement.userdomainName. Étant donné que votre site fonctionne probablement avec "Autoriser l'accès anonyme" - l'utilisateur ne transmet pas que leurs informations de domaine au serveur et IIS vous donnent les informations de compte qu'il dispose, à savoir le compte de pool de l'App. P>
Selon la réponse de Warrlock: Comment puis-je obtenir la baseurl de site? P >
élégant :) p>
Si quelqu'un ici cherche réellement le nom de domaine du serveur, voici un piratage que j'utilise depuis les débuts .NET:
[DllImport("netapi32.dll", CharSet = CharSet.Auto)] static extern int NetWkstaGetInfo(string server, int level, out IntPtr info); [DllImport("netapi32.dll")] static extern int NetApiBufferFree(IntPtr pBuf); [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)] class WKSTA_INFO_100 { public int wki100_platform_id; [MarshalAs(UnmanagedType.LPWStr)] public string wki100_computername; [MarshalAs(UnmanagedType.LPWStr)] public string wki100_langroup; public int wki100_ver_major; public int wki100_ver_minor; } public static string GetMachineNetBiosDomain() { IntPtr pBuffer = IntPtr.Zero; WKSTA_INFO_100 info; int retval = NetWkstaGetInfo(null, 100, out pBuffer); if (retval != 0) throw new Win32Exception(retval); info = (WKSTA_INFO_100)Marshal.PtrToStructure(pBuffer, typeof(WKSTA_INFO_100)); string domainName = info.wki100_langroup; NetApiBufferFree(pBuffer); return domainName; }
dans le web.config, vous devez ajouter la pièce de code
<authentication mode="Windows"/> <authorization> <deny users="?"/> </authorization> <identity impersonate="true"/>
Un peu en retard .. Mais la réponse manquante et meilleure que j'ai trouvée, après avoir exactement le même problème: comme indiqué sur le MSDN site : P> Cette valeur de retour est indépendante des informations d'identification de domaine sous lesquelles
L'application est exécutée. Cette méthode récupérera l'ordinateur
Domaine indépendamment des informations d'identification du domaine de confiance qu'il est exécuté
sous. p>
blockQuote> testé sur mon PC personnel (pas de domaine ADD) et au travail (avec AD-Domain) sous IIS (accès anonyme). P> p>
Le domaine de lequel se connecter? Le tiens? Allez-vous toujours être connecté? IIS a typiquement son propre identifiant distinct qu'il fonctionne sous, ce qui, comme vous l'avez découvert, est dans le domaine "IIS AppPool".