我的应用程序具有基于部署环境而变化的关键功能。
像SQL字符串之类的东西......
我几周来一直依赖于从HttpContext读取信息的方法,并设置一个枚举,触发一系列其他事件。
最近,我无法找到我们所做的改变,GetLocation()
总是在所有三种环境中返回127.0.0.1。
此外,HttpContext.Current.Request.UserAgent
始终为空,但父对象Request
不是。
我可以改变什么来实现这一目标?
private static string GetLocation()
{
return HttpContext.Current.Request.Url.Host;
}
private DeploymentType GetCurrentDeploymentType()
{
switch (Location)
{
case "localhost":
return DeploymentType.Sandbox;
case "ppe.host.net":
return DeploymentType.PPE;
case "prod.com":
return DeploymentType.Production;
default:
return DeploymentType.Sandbox;
}
}
解决方案/更多信息
我们在这里走在正确的轨道上,但是有一些有趣的行为正在发生。
您在上面看到的方法存在于一个Lazy Singleton中,它遵循Jon Skeet的伟大模式:
REFERENCE: Lazy Singleton from C# in depth, 3rd edition
这是完美的,因为在主控制器中调用之前,对象没有实例化,因此HttpContext
已经建立。
好吧,似乎我们在Startup.Auth.cs的ConfigureAuth(IAppBuilder app)
中添加了对象的引用。
这是故意的,因为我们希望为应用的部署位置分配正确的ClientId,这取决于OAuth2流。
我们似乎需要重新思考我们的设计模式。
除非有人想要添加输入,否则很快就会关闭此内容。