C# 无法在Startup.cs-Web API中保存ConfigurationSection

C# 无法在Startup.cs-Web API中保存ConfigurationSection,c#,asp.net-web-api,configurationsection,C#,Asp.net Web Api,Configurationsection,启动时,我无法将自定义的ConfigurationSection保存在我的web.config文件中 我遵循这一点来实现一个通用的实现。我的单元测试通过了,我可以在单元测试中保存deConfigurationSection 在应用程序启动时,我想基于控制器类名和所属方法名构建一个ClaimCollection: Startup.cs public void Configuration(IAppBuilder app) { Config = new HttpConfiguration()

启动时,我无法将自定义的
ConfigurationSection
保存在我的
web.config
文件中

我遵循这一点来实现一个通用的实现。我的单元测试通过了,我可以在单元测试中保存de
ConfigurationSection

在应用程序启动时,我想基于控制器类名和所属方法名构建一个
ClaimCollection

Startup.cs

public void Configuration(IAppBuilder app)
{

    Config = new HttpConfiguration();

    BuildUnityContainer();

    BuildClaimCollection(); <----------------

    ConfigureOAuth(app);

    WebApiConfig.Register(Config);
    app.UseCors(Microsoft.Owin.Cors.CorsOptions.AllowAll);
    app.UseWebApi(Config);

}

public void BuildClaimCollection()
{

    //config section
    MethodClaimSection methodClaimSection = BaseConfigurationSection<MethodClaimSection>.Open();

    var methods = GetClaimAuthorizedMethods();

    foreach (var method in methods)
    {
        var claimValue = GetClaimValueFromMethodName(method);
        var claim = new MethodClaimElement()
        {
            Type = "Method",
            Value = claimValue
        };

        methodClaimSection.MethodClaims.Add(claim);
    }
    methodClaimSection.Save();
}  
public void配置(IAppBuilder应用程序)
{
Config=新的HttpConfiguration();
BuildUnityContainer();

BuildClaimCollection();你没有。让运行你的应用程序池的帐户对网站目录进行写访问是一个非常非常糟糕的主意。不要尝试写入你的web.config文件。从其他安全的位置读取并保存此信息。除了上面所说的,web.config文件一直处于监视状态。此文件中的任何更改都会导致应用程序崩溃在应用程序启动时更改web.config时使用pool recycle.So beaware。是否最好写入一个单独的.xml文件。像这样?Will,你的意思是说使用“安全位置”可以创建一个单独的文件?
public abstract class BaseConfigurationSection<T> : ConfigurationSection
             where T : ConfigurationSection, new()
{
    public void Save()
    {
        System.Configuration.Configuration config = BaseConfigurationSection<T>.GetConfiguration();
        T section = (T)config.Sections[typeof(T).Name];

        foreach (var property in this.GetType().GetProperties())
        {
            if (property.IsDefined(typeof(ConfigurationPropertyAttribute), false))
            {
                section.GetType().InvokeMember(property.Name, BindingFlags.SetProperty, null, section, 
                    new object[] { 
                        .GetType().InvokeMember(property.Name, BindingFlags.GetProperty, null, this, null) 
                        });
            }
        }

        config.Save(ConfigurationSaveMode.Full);
    }
}