erw*_*ard 5 c# configurationsection asp.net-web-api
我无法在启动时将我的自定义保存ConfigurationSection在我的web.config文件中.
我已经按照本教程进行了通用实现.我的单元测试通过了,我能够ConfigurationSection在单元测试中保存de !
在应用程序启动时,我想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();
}
Run Code Online (Sandbox Code Playgroud)
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);
}
}
Run Code Online (Sandbox Code Playgroud)
当我运行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方法......
如何解决这个问题呢?
| 归档时间: |
|
| 查看次数: |
701 次 |
| 最近记录: |