Bob*_*orn 5 c# asp.net web-config
编辑#2:config.FilePath显示它正在查看与我期望的文件不同的文件:“ C:\ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ Config \ web.config”。我期望它在我的项目中使用web.config。需要弄清楚为什么会这样。
我的Web API中有一个方法,试图从web.config中的授权部分读取值。根据我的发现,这应该可以工作:
public AuthorizationSetting GetAuthorizationSettings()
{
var config = WebConfigurationManager.OpenWebConfiguration(null);
var section = config.GetSection("system.web/authorization") as AuthorizationSection;
foreach (AuthorizationRule rule in section.Rules)
{
if (rule.Action.ToString().ToLower() == "allow")
{
Debug.WriteLine(rule);
}
}
return new AuthorizationSetting();
}
Run Code Online (Sandbox Code Playgroud)
这是web.config中包含授权信息的部分:
<system.web>
<compilation debug="true" targetFramework="4.5" />
<httpRuntime targetFramework="4.5" />
<identity impersonate="true" />
<authentication mode="Windows" />
<authorization>
<allow roles="role1,role2,role3"/>
<deny users="*"/>
</authorization>
</system.web>
Run Code Online (Sandbox Code Playgroud)
您会看到有一个允许和一个拒绝。当我运行代码时,似乎只有一条规则。既然有一个允许和一个拒绝,就不应该有两个吗?一个规则看起来是对用户具有“允许”和“ *”的操作。那不是web.config中的内容。我在这里想念什么?
**编辑**我考虑了它正在读取其他web.config文件的可能性。但是解决方案中只有一个其他的web.config文件(在“视图”下)。我也将其更改为具有相同的授权部分,但仍得到相同的结果。
正如您已经弄清楚的那样,使用Nullin 作为加载服务器根 web.configpath的参数OpenWebConfiguration
%SystemRoot%\Microsoft.NET\Framework64\v4.0.30319\Config\
Run Code Online (Sandbox Code Playgroud)
文档说:
The virtual path to the configuration file. If null, the root Web.config file is opened.
但我们可以假设它是站点的根 Web 配置,而不是服务器。无论如何,尝试使用:
var config = WebConfigurationManager.OpenWebConfiguration("~");
Run Code Online (Sandbox Code Playgroud)