2008-09-18 10 views
12

Dire que j'ai le web.config suivant:Détection Web.Config Mode d'authentification

<?xml version="1.0" encoding="utf-8"?> 
<configuration> 
    <system.web> 
     <authentication mode="Windows"></authentication> 
    </system.web> 
</configuration> 

En utilisant ASP.NET C#, comment puis-je détecter la valeur de mode de la balise d'authentification?

Répondre

4

Essayez Context.User.Identity.AuthenticationType

Go pour les gens de réponse de PB

+0

Je accepté votre réponse parce que le vôtre était le plus rapide et travaillé :) – GateKiller

+1

Thi s est faux. Dans le cas général IIdentity.AuthenticationType peut contenir n'importe quelle chaîne, qui ne correspond pas nécessairement au mode d'authentification défini dans web.config. J'utiliserais la solution de @pb. – Joe

-2

utilisez une requête xpath //configuration/system.web/authentication[mode]?

protected void Page_Load(object sender, EventArgs e) 
{ 
XmlDocument config = new XmlDocument(); 
config.Load(AppDomain.CurrentDomain.SetupInformation.ConfigurationFile); 
XmlNode node = config.SelectSingleNode("//configuration/system.web/authentication"); 
this.Label1.Text = node.Attributes["mode"].Value; 
} 
+1

Non cela ne fonctionne pas dans le cas général. Une application ASP.NET hérite des paramètres de machine.Config et de tous les autres fichiers web.config situés plus haut dans l'arborescence de répertoires virtuels: voir http://msdn.microsoft.com/fr-fr/library/ms178685.aspx Votre technique ne regarde que le fichier web.config le plus bas. – Joe

+1

XPath n'est pas quelque chose qui devrait être utilisé pour analyser la configuration par n'importe quel moyen. L'utilisation des bibliothèques fournies par MS est une approche beaucoup plus efficace et maintenable. Le commentaire ci-dessus est un parfait exemple de pourquoi ne pas l'utiliser ainsi que le fait que toutes les plates-formes n'utiliseront pas nécessairement les documents de configuration pour l'authentification ou d'autres paramètres; un autre cas valide est que si l'emplacement du type d'authentification est modifié, vous devez remplacer une chaîne codée en dur, recompiler, puis redistribuer. –

11

Importer l'espace de noms System.Web.Configuration et faire quelque chose comme:

var configuration = WebConfigurationManager.OpenWebConfiguration("/"); 
var authenticationSection = (AuthenticationSection)configuration.GetSection("system.web/authentication"); 
if (authenticationSection.Mode == AuthenticationMode.Forms) 
{ 
    //do something 
} 
+0

Vous devez utiliser la racine de l'application "~" au lieu de la racine du site "/", mais mieux appeler WebConfigurationManager.GetSection ("system.web/authentication") directement –

2

Vous pouvez également obtenir le mode d'authentification en utilisant le ConfigurationManager statique classe pour obtenir la section et la ENUM AuthenticationMode.

AuthenticationMode authMode = ((AuthenticationSection) ConfigurationManager.GetSection("system.web/authentication")).Mode;

The difference between WebConfigurationManager and ConfigurationManager


Si vous voulez récupérer le nom de la constante dans l'énumération spécifiée, vous pouvez le faire en utilisant la méthode Enum.GetName(Type, Object)

Enum.GetName(typeof(AuthenticationMode), authMode); // e.g. "Windows"

+0

Votre solution a fonctionné pour moi. Merci!! – Gerald