0

在从链接下载文件之前,我需要获取它的一些数据(名称、大小、内容类型等)

            WebResponse response = null;
            using (token.Token.Register(() => client.Abort(), useSynchronizationContext: false))
            {
                response = await Task.Run(() => client.GetResponseAsync()).ConfigureAwait(true);
                token.Token.ThrowIfCancellationRequested();
            }

在我检查了客户类型并获得了必要的信息之后。但是有一种链接我无法获取数据。打电话时

response = await Task.Run (() => client.GetResponseAsync ())

返回错误 404。该怎么办?我以 https://www.mp3juices.cc/的链接为例

4

1 回答 1

0

您请求的下载地址不适用于 WebRequest 处理,它不指向网页或文件。

访问URL时,实际上是由网站处理程序处理并返回文件。WebRequest直接访问URL,无法获取返回数据。

如果要验证这一点,可以使用BackgroundDownloader直接下载 URL 对应的文件。

private StorageFile destinationFile;
private async void Button_Click(object sender, RoutedEventArgs e)
{
    Uri url = new Uri(Link.Text);

    destinationFile = await ApplicationData.Current.LocalFolder.CreateFileAsync(
        "test.html", CreationCollisionOption.GenerateUniqueName);

    BackgroundDownloader downloader = new BackgroundDownloader();
    DownloadOperation download = downloader.CreateDownload(url, destinationFile);
    download.RangesDownloaded += DownloadHandle;
    await download.StartAsync();
}

private async void DownloadHandle(DownloadOperation sender, BackgroundTransferRangesDownloadedEventArgs args)
{
    string content = await FileIO.ReadTextAsync(destinationFile);
    Debug.WriteLine(content);
}

谢谢。

于 2020-07-13T09:51:20.207 回答