在 IIS (Host.SystemWeb) 下 运行 时,如何设置 OWIN 键,例如 host.AppMode?
How do I set OWIN keys like host.AppMode when running under IIS (Host.SystemWeb)?
在我正在重构的应用程序的 OWIN 管道中,我发现了以下代码片段:
private bool IsDevelopment(IAppBuilder app)
{
const string appModeKey = "host.AppMode";
if (app.Properties.ContainsKey(appModeKey))
{
var appMode = app.Properties[appModeKey] as string;
if (!string.IsNullOrEmpty(appMode))
{
return appMode.Equals("development", StringComparison.InvariantCultureIgnoreCase);
}
}
return false;
}
然后使用此方法的结果来做出决定,例如。管道中包含哪些组件:
if (IsDevelopment(app))
{
app.Use<DevelopmentAuthMiddleware>();
}
else
{
app.Use<ProductionAuthMiddleware>();
}
现在,在我正在设置的新测试环境中,我想 - 现在,但不是永远 - 使用开发配置。
有没有一种方法可以在不更改决策代码的情况下实现?换句话说,如何从应用程序代码外部将 app.Properties["host.AppMode"]
设置为 "development"
?
(Web.config 中的 AppSettings 或类似的东西可以工作,如果我能弄清楚如何;我可以在部署时更改它们,因为它们因环境而异。)
如果您使用 "old" Asp.Net,那么最简单的方法是使用 ConfigurationManager 从 web.config 的 <appSettings>
部分读取密钥,即:
private bool IsDevelopment(IAppBuilder app) {
return ConfigurationManager.AppSettings["isDevelopment"] == "true";
}
在web.config中:
<appSettings>
<add key="isDevelopment" value="true" />
</appSettings>
Asp.Net 核心默认使用Env variables来实现类似的事情。
检查 Host.SystemWeb 的 source code 有一部分代码直接将 host.AppMode
设置为 developer 根据web.config中的system.web/compilation
是否设置为调试
CompilationSection compilationSection = (CompilationSection)System.Configuration.ConfigurationManager.GetSection(@"system.web/compilation");
bool isDebugEnabled = compilationSection.Debug;
if (isDebugEnabled)
{
builder.Properties[Constants.HostAppModeKey] = Constants.AppModeDevelopment;
}
在整个源代码中,没有其他直接访问 属性 设置它的地方。
所以我的建议是更新 web.config 文件
<system.web>
<compilation debug="true" />
应该允许从应用程序代码外部将 app.Properties["host.AppMode"]
设置为 "development"。
在我正在重构的应用程序的 OWIN 管道中,我发现了以下代码片段:
private bool IsDevelopment(IAppBuilder app)
{
const string appModeKey = "host.AppMode";
if (app.Properties.ContainsKey(appModeKey))
{
var appMode = app.Properties[appModeKey] as string;
if (!string.IsNullOrEmpty(appMode))
{
return appMode.Equals("development", StringComparison.InvariantCultureIgnoreCase);
}
}
return false;
}
然后使用此方法的结果来做出决定,例如。管道中包含哪些组件:
if (IsDevelopment(app))
{
app.Use<DevelopmentAuthMiddleware>();
}
else
{
app.Use<ProductionAuthMiddleware>();
}
现在,在我正在设置的新测试环境中,我想 - 现在,但不是永远 - 使用开发配置。
有没有一种方法可以在不更改决策代码的情况下实现?换句话说,如何从应用程序代码外部将 app.Properties["host.AppMode"]
设置为 "development"
?
(Web.config 中的 AppSettings 或类似的东西可以工作,如果我能弄清楚如何;我可以在部署时更改它们,因为它们因环境而异。)
如果您使用 "old" Asp.Net,那么最简单的方法是使用 ConfigurationManager 从 web.config 的 <appSettings>
部分读取密钥,即:
private bool IsDevelopment(IAppBuilder app) {
return ConfigurationManager.AppSettings["isDevelopment"] == "true";
}
在web.config中:
<appSettings>
<add key="isDevelopment" value="true" />
</appSettings>
Asp.Net 核心默认使用Env variables来实现类似的事情。
检查 Host.SystemWeb 的 source code 有一部分代码直接将 host.AppMode
设置为 developer 根据web.config中的system.web/compilation
是否设置为调试
CompilationSection compilationSection = (CompilationSection)System.Configuration.ConfigurationManager.GetSection(@"system.web/compilation");
bool isDebugEnabled = compilationSection.Debug;
if (isDebugEnabled)
{
builder.Properties[Constants.HostAppModeKey] = Constants.AppModeDevelopment;
}
在整个源代码中,没有其他直接访问 属性 设置它的地方。
所以我的建议是更新 web.config 文件
<system.web>
<compilation debug="true" />
应该允许从应用程序代码外部将 app.Properties["host.AppMode"]
设置为 "development"。