我正在制作一个页面,接受来自任何页面的帖子数据,这些页面无法更改,访问或以任何方式控制。
我需要以某种方式获得用户的时区。我知道,理想情况下,发布页面会执行此操作,但我无法访问这些页面。
我已经在这个网站上阅读了其他答案,并提出了2个差不多但不完全解决的问题。
首先,有javascript。我可以让javascript函数返回(或更改标签)正确的值,但问题是我在回发之前需要这些信息。我一直在尝试在另一个页面上写下时区名称并阅读该页面,但我不知道如何开始这样做?欢迎使用javascript的任何其他解决方法,或者在调用Page_Load之前强制调用此方法吗?
function getTimeZone()
{
var d = new Date()
var gmtHours = -d.getTimezoneOffset()/60;
var label = document.getElementById("<%=TZ.ClientID%>");
label.textContent = "GMT " + gmtHours;
}
第二个解决方案是从另一个页面读取它,我正在使用它:
http://ipinfodb.com/ip_query.php?ip=192.36.167.120&timezone=true
(在那里完全随机ip,顺便说一下)
所以这是我从该网站获取信息的功能:
public string GetTimezone(string ip)
{
string address = string.Format("http://ipinfodb.com/ip_query.php?ip={0}&timezone=true", ip);
string timezone = "";
try
{
XmlTextReader reader = new XmlTextReader(address);
HttpWebRequest wrq = (HttpWebRequest)WebRequest.Create(address);
wrq.Proxy.Credentials = CredentialCache.DefaultCredentials;
reader = new XmlTextReader(wrq.GetResponse().GetResponseStream());
string lastRead = "";
while (reader.Read())
{
if (reader.NodeType == XmlNodeType.Element)
{
lastRead = reader.Name;
}
if (reader.NodeType == XmlNodeType.Text)
{
if (string.Compare(lastRead, "TimezoneName", true) == 0)
{
timezone = reader.Value;
break;
}
}
}
}
catch
{
timezone = "";
}
return timezone;
}
基本上,这可以在调试模式下工作,但是当它处于活动状态时,只返回一个空字符串。我很困惑?有没有更好的方法从页面读取数据?我正在使用Request.ServerVariables [“REMOTE_ADDR”]来获取ip,这似乎是正确的,因为它将正确的ip插入到我正在使用的数据库中。
这是电话:
GetTimezone(Request.ServerVariables["REMOTE_ADDR"]);
答案 0 :(得分:0)
您可能会遇到异常,可能是因为生产服务器上存在信任问题/防火墙。
摆脱邪恶的catch
区块,以便找出异常是什么。