2008-09-18 25 views
12

Nói rằng tôi có web.config sau:Phát hiện Web.Config Authentication Mode

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

Sử dụng ASP.NET C#, làm thế nào tôi có thể phát hiện các giá trị Chế độ của thẻ xác thực?

Trả lời

4

Hãy thử Context.User.Identity.AuthenticationType

Go cho folks câu trả lời PB của

+0

Tôi có chấp nhận câu trả lời của bạn vì câu trả lời của bạn nhanh nhất và hiệu quả :) – GateKiller

+1

Thi s là sai. Trong trường hợp chung IIdentity.AuthenticationType có thể chứa bất kỳ chuỗi nào, có thể không nhất thiết phải khớp với chế độ xác thực được đặt trong web.config. Tôi muốn sử dụng giải pháp từ @pb. – Joe

-2

sử dụng truy vấn 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

Không có điều này không hoạt động trong trường hợp chung. Ứng dụng ASP.NET kế thừa cài đặt từ machine.Config và từ tất cả các tệp web.config khác cao hơn trong cây thư mục ảo: xem http://msdn.microsoft.com/en-us/library/ms178685.aspx Kỹ thuật của bạn chỉ xem tệp web.config thấp nhất. – Joe

+1

XPath không phải là cái gì đó nên được sử dụng để phân tích cú pháp cấu hình bằng bất kỳ phương tiện nào. Sử dụng các thư viện được cung cấp bởi MS là một cách tiếp cận hiệu quả hơn và dễ bảo trì hơn. Nhận xét trên là một ví dụ hoàn hảo về lý do tại sao không sử dụng nó cũng như thực tế là không phải tất cả các nền tảng sẽ nhất thiết phải sử dụng các tài liệu cấu hình để xác thực hoặc các cài đặt khác; trường hợp hợp lệ khác là nếu vị trí của loại xác thực được thay đổi, thì bạn phải thay thế một chuỗi mã cứng, biên dịch lại, sau đó phân phối lại. –

11

nhập các System.Web.Configuration namespace và làm điều gì đó như:

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

Bạn nên sử dụng root ứng dụng "~" thay vì root site "/", nhưng tốt hơn để gọi WebConfigurationManager.GetSection ("system.web/authentication") trực tiếp –

2

Bạn cũng có thể nhận được các chế độ xác thực bằng cách sử dụng các ConfigurationManager lớp tĩnh để có được phần và sau đó là enum AuthenticationMode.

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

The difference between WebConfigurationManager and ConfigurationManager


Nếu bạn muốn lấy tên của hằng số trong kiểu liệt kê cụ thể bạn có thể làm điều này bằng cách sử dụng các Enum.GetName(Type, Object) phương pháp

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

+0

Giải pháp của bạn đã làm việc cho tôi. Cảm ơn!! – Gerald