在MVC5应用程序中HttpContext.Current中的行为更改

时间:2014-06-10 20:42:07

标签: c# asp.net-mvc asp.net-mvc-5

我的应用程序具有基于部署环境而变化的关键功能。

像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流。

我们似乎需要重新思考我们的设计模式。

除非有人想要添加输入,否则很快就会关闭此内容。

0 个答案:

没有答案