C# 如何在不引用System.Web的情况下检查Web.Config中的身份验证模式值

C# 如何在不引用System.Web的情况下检查Web.Config中的身份验证模式值,c#,.net,asp.net,C#,.net,Asp.net,我有一个类需要从web.config检查身份验证模式 例: 我的问题是,这个类/项目正在我的Web项目以及WinForms项目中被引用。WinForms项目需要.NET 4.0客户端配置文件框架(如果可能,我们不希望需要完整的.NET 4框架)。如果我没有弄错的话,客户端配置文件不包含System.Web.dll 是否有一种方法可以在不引用System.Web的情况下检查此值(最好不用手动解析配置文件) 我试过: object authSection = ConfigurationManager

我有一个类需要从web.config检查身份验证模式

例:

我的问题是,这个类/项目正在我的Web项目以及WinForms项目中被引用。WinForms项目需要.NET 4.0客户端配置文件框架(如果可能,我们不希望需要完整的.NET 4框架)。如果我没有弄错的话,客户端配置文件不包含System.Web.dll

是否有一种方法可以在不引用System.Web的情况下检查此值(最好不用手动解析配置文件)

我试过:

object authSection = ConfigurationManager.GetSection("system.web/authentication");
if (authSection.ToString() == "Windows")
{ ... }
但是,ToString()只返回字符串“System.Web.Configuration.AuthenticationSection”


谢谢大家!

嘿,如果您在同一个项目中谈论web配置,请尝试使用以下方法

ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel)

也可以在ConfigurationManager成员中使用其他类似方法之一。我现在不能为你测试,但我很确定它们应该能工作。因为本质上他们不关心它是什么类型的conf文件,只要有一个,因为web.config的继承类型是一个config,所以您应该能够像访问任何其他文件一样访问它,并查询您需要的特定字段


您需要在代码中的什么地方对此做出决定?如果用户在那一点上通过了身份验证,您可以使用它并进行相应的处理。对于窗体,这将始终返回窗体,对于Windows标识,它通常是NTLM,尽管它可以是协商或Kerberos。

我已使用上述代码获取身份验证模式。我只是对你的代码做了一些修改。请在这里找到

AuthenticationSection authSection = (AuthenticationSection)ConfigurationManager.GetSection("system.web/authentication"); 
if (authSection.Mode.ToString() == "Windows")  
可以对标识执行GetType()操作吗?它应该是FormsAuthentication的FormsEntity。只是一个想法。。。。
object authSection = ConfigurationManager.GetSection("system.web/authentication");
if (authSection.ToString() == "Windows")
{ ... }
ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel)
AuthenticationSection authSection = (AuthenticationSection)ConfigurationManager.GetSection("system.web/authentication"); 
if (authSection.Mode.ToString() == "Windows")