我刚刚将我的应用程序发布到我的Windows Azure网站。 在我的网站上,我使用以下代码获取用户的IP地址:
ip = HttpContext.Current.Request.UserHostAddress;
当我在localhost上运行它时工作正常,但是当我在Azure上运行它时它会崩溃 - 我甚至尝试捕获异常,但它似乎没有抛出任何异常。
此外,当我远程调试网站时,我看不到HttpContext的“当前”属性 - 它只是说:
Cannot evaluate expression because the code of the current method is optimized.
此外,我可以看到我可以轻松获取控制器中的IP - 只有当我在控制器外调用HttpContext.Current.Request.UserHostAddress时才会出现问题。
有谁知道问题是什么?
答案 0 :(得分:3)
在Application_Start运行完毕之后,使用IIS集成模式时,HttpContext不可用。
为了解决这个问题,您可以使用单例模式来读取设置并将其存储,直到应用程序循环使用。
public class IPService
{
private static string ip = string.Emtpy;
public static string GetIP()
{
if (string.IsNullOrEmpty(this.ip))
{
this.ip = HttpContext.Current.Request.UserHostAddress;
}
return this.ip;
}
}
然后,只要您需要访问IP,就可以致电:
var ip = IPService.GetIP();
请确保在应用程序启动期间不要调用它。