使HttpWebRequest.GetResponse()在连接失败时返回一个值

时间:2016-11-26 21:44:13

标签: c# unity3d web time httpwebrequest

我在Unity上开发一款需要每2小时重置播放器生命的游戏,并避免作弊我尝试使用互联网时间。为此我在C#上创建了一个简单的方法来从microsoft.com获取DateTime。问题是有时连接失败了,我希望它在发生这种情况时返回一个bool,所以我可以获得System.DateTime.Now并在连接可用时再次检查Internet时间。我尝试了一些东西但没有任何效果。以下是我使用的代码:

public DateTime GetInternetTime()
{
    var myHttpWebRequest = (HttpWebRequest)WebRequest.Create("http://www.microsoft.com");
    myHttpWebRequest.Timeout = 5000;
    myHttpWebRequest.ReadWriteTimeout = 5000;
    var response = myHttpWebRequest.GetResponse();

    if (response == null)
    {
        dateTime = DateTime.Now;
        connecionFailed = true;
    }
    string todaysDates = response.Headers["date"];
    dateTime = DateTime.ParseExact(todaysDates, "ddd, dd MMM yyyy HH:mm:ss 'GMT'", CultureInfo.InvariantCulture.DateTimeFormat, DateTimeStyles.AssumeUniversal);
    connecionFailed = false;
    return dateTime;
}

请帮忙!我真的坚持这个!

1 个答案:

答案 0 :(得分:2)

发生错误时,

GetResponse会抛出异常。例如,如果主机无法解析。你需要的只是抓住它并在它之后采取适当的行动。

在下面的代码中我处理WebException,但在此方法中可能会发生一些其他异常。所以你可以改为普通的Exception类。

public DateTime GetInternetTime()
{
    var myHttpWebRequest = (HttpWebRequest)WebRequest.Create("http://www.microsoft.com");
    myHttpWebRequest.Timeout = 5000;
    myHttpWebRequest.ReadWriteTimeout = 5000;

    try
    {
        var response = myHttpWebRequest.GetResponse();
        string todaysDates = response.Headers["date"];
        dateTime = DateTime.ParseExact(todaysDates, "ddd, dd MMM yyyy HH:mm:ss 'GMT'", CultureInfo.InvariantCulture.DateTimeFormat, DateTimeStyles.AssumeUniversal);
        connectionFailed = false;
    } catch(WebException)
    {
        connectionFailed = true;
        dateTime = DateTime.Now;
    }

    return dateTime;
}