我无法在启动时将自定义保存ConfigurationSection
在我的web.config
文件中。
我已经按照本教程进行了通用实现。我的单元测试通过了,我可以ConfigurationSection
在单元测试中保存 de!
在应用程序启动时,我想ClaimCollection
基于控制器类名和所属方法名构建一个:
启动.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();
}
BaseConfigurationSection.cs
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);
}
}
当我运行 WebApi 应用程序时,我收到此错误:
无法访问已处置的对象。对象名称:'System.Web.Http.HttpServer'。
堆栈跟踪:
[ObjectDisposedException:无法访问已处置的对象。对象名称:'System.Web.Http.HttpServer'。] System.Net.Http.DelegatingHandler.CheckDisposed() +332772 System.Net.Http.DelegatingHandler.CheckDisposedOrStarted() +13 System.Net.Http.DelegatingHandler.set_InnerHandler( HttpMessageHandler value) +23 System.Web.Http.HttpServer.Initialize() +108 System.Web.Http.HttpServer.b__b() +31 System.Threading.LazyInitializer.EnsureInitializedCore(T& target, Boolean& initialized, Object& syncLock, Func` 1 valueFactory) +115 System.Threading.LazyInitializer.EnsureInitialized(T& target, Boolean& initialized, Object& syncLock, Func`1 valueFactory) +72 System.Web.Http.HttpServer.EnsureInitialized() +119 System.Web.Http.d__0。
Configuration 类没有 Dispose 方法...
如何解决这个问题呢?