public static async Task<Stream> HttpDownloadAsync(string url) { using (var client = new HttpClient()) { var response = await client.GetAsync(url); if (response.IsSuccessStatusCode) { var stream = await response.Content.ReadAsStreamAsync(); return stream; } else { throw new Exception("Download failed."); } } }出现了无效的请求URI。 请求URI必须是绝对URI或必须设置BaseAddress
时间: 2023-06-18 13:08:55 浏览: 410
AsyncTask 网络下载文件
3星 · 编辑精心推荐
这个错误通常是由于传入的 url 参数不是有效的绝对 URI 导致的。可以尝试使用 `Uri.TryCreate` 方法将其转换为绝对 URI,代码如下:
```
public static async Task<Stream> HttpDownloadAsync(string url)
{
if (!Uri.TryCreate(url, UriKind.Absolute, out var uri))
{
throw new Exception("Invalid URL.");
}
using (var client = new HttpClient())
{
var response = await client.GetAsync(uri);
if (response.IsSuccessStatusCode)
{
var stream = await response.Content.ReadAsStreamAsync();
return stream;
}
else
{
throw new Exception("Download failed.");
}
}
}
```
另外,如果你的应用程序需要频繁下载同一域名下的资源,可以使用 `HttpClient.BaseAddress` 属性设置默认的基础地址,避免在每次调用时都需要传递完整的 URI。例如:
```
var client = new HttpClient();
client.BaseAddress = new Uri("https://example.com/");
var response = await client.GetAsync("path/to/resource");
```
这样就会自动将基础地址和相对路径拼接成完整的 URI,从而避免了手动拼接 URI 的错误。
阅读全文