2008-09-18 18 views
12

Say mam następujący web.config:Wykrywanie Web.Config Authentication Mode

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

Korzystanie ASP.NET C#, w jaki sposób można wykryć wartość trybu znacznika uwierzytelnienia?

Odpowiedz

4

Spróbuj Context.User.Identity.AuthenticationType

idź do PB odpowiedziami ludzi

+0

mam Enum.GetName(Type, Object) zaakceptował twoją odpowiedź, ponieważ twoja była najszybsza i działała :) – GateKiller

+1

Thi s jest błędne. W ogólnym przypadku IIdentity.AuthenticationType może zawierać dowolny ciąg znaków, który niekoniecznie musi odpowiadać trybowi uwierzytelniania ustawionemu w pliku web.config. Użyłbym rozwiązania z @ pb. – Joe

-2

użyć zapytania 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

Nie, to nie działa w ogólnym przypadku. Aplikacja ASP.NET dziedziczy ustawienia z pliku machine.Config i wszystkich innych plików web.config znajdujących się wyżej w drzewie katalogów wirtualnych: zobacz http://msdn.microsoft.com/en-us/library/ms178685.aspx Twoja technika patrzy tylko na najniższy plik web.config. – Joe

+1

XPath nie jest czymś, co powinno zostać użyte do parsowania konfiguracji w jakikolwiek sposób. Korzystanie z bibliotek dostarczanych przez MS jest znacznie bardziej wydajne i możliwe do utrzymania podejście. Powyższy komentarz jest doskonałym przykładem, dlaczego nie używać go, a także fakt, że nie wszystkie platformy będą musiały koniecznie korzystać z dokumentów konfiguracyjnych do uwierzytelniania lub innych ustawień; Innym ważnym przypadkiem jest sytuacja, w której zmieniono lokalizację typu uwierzytelniania, następnie należy zastąpić ciąg znaków zakodowany, zrekompilować, a następnie rozprowadzić. –

11

Importuj System.Web.Configuration nazw i zrobić coś takiego:

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

Powinieneś użyć root'a aplikacji "~" zamiast głównego katalogu witryny "/", ale lepiej zadzwonić do WebConfigurationManager.GetSection ("system.web/authentication") bezpośrednio –

2

Można również uzyskać tryb uwierzytelniania za pomocą statycznego ConfigurationManager klasę, aby uzyskać punkt, a następnie enum AuthenticationMode.

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

The difference between WebConfigurationManager and ConfigurationManager


Jeśli chcesz odzyskać nazwę stałe w określonym wyliczenie można to zrobić za pomocą metody

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

+0

Twoje rozwiązanie zadziałało. Dzięki!! – Gerald