0

URL からいくつかのデータを読み取る必要がありますが、文字列 (ICAO) によっては、URL が存在しないことがあります (有効ではありません)。この場合、「N/A」と表示されるはずですが、それは機能しません... 3 つの URL がすべて読み取り可能である場合にのみ機能します。

        [Invoke]
    public List<Category> getWeather(string ICAO)
    {
        try
        {
            List<Category> lstcat = new List<Category>();
            Category cat = new Category();
            string fileString;
            bool isexists = FtpDirectoryExists("ftp://tgftp.nws.noaa.gov/data/observations/metar/stations/" + ICAO);
            if (isexists == true)
            {
                WebClient request = new WebClient();
                string url = "http://weather.noaa.gov/pub/data/observations/metar/stations/" + ICAO;
                byte[] newFileData = request.DownloadData(url);
                fileString = System.Text.Encoding.UTF8.GetString(newFileData);
                cat.Cat = "METAR";
                lstcat.Add(cat);
                cat = new Category();
                cat.Cat = fileString;
                lstcat.Add(cat);
                url = "http://weather.noaa.gov/pub/data/forecasts/shorttaf/stations/" + ICAO;
                newFileData = request.DownloadData(url);

                fileString = System.Text.Encoding.UTF8.GetString(newFileData);
                cat = new Category();
                cat.Cat = "Short TAF";
                lstcat.Add(cat);
                cat = new Category();
                cat.Cat = fileString;
                lstcat.Add(cat);

                url = "http://weather.noaa.gov/pub/data/forecasts/taf/stations/" + ICAO;
                newFileData = request.DownloadData(url);

                fileString = System.Text.Encoding.UTF8.GetString(newFileData);
                cat = new Category();
                cat.Cat = "Long TAF";
                lstcat.Add(cat);
                cat = new Category();
                cat.Cat = fileString;
                lstcat.Add(cat);

            }
            else
            {
                fileString = "N/A;N/A";
            }
            return null;
        }
        catch (Exception)
        {

            throw;
        }
    }
4

2 に答える 2

1

リモートファイルが存在するかどうかを確認するメソッドを作成します。sattus コードが 200 または 302 の場合は URl に Heder リクエストを送信し、true を返します。それ以外の場合は false を返します。

HttpWebResponse response = null;
var request = (HttpWebRequest)WebRequest.Create(/* url */);
request.Method = "HEAD";


try
{
    response = (HttpWebResponse)request.GetResponse();
}
catch (WebException ex)
{
    /* A WebException will be thrown if the status of the response is not `200 OK` */
}
finally
{
    // Don't forget to close your response.
    if (response != null)
    {
        response.Close()
    }
}
于 2013-09-07T06:41:24.833 に答える