You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

求助:UWP中如何获取IIS服务器的目录列表

获取IIS目录下所有图片列表的可行方案

嘿,当然可行啦!既然你已经在IIS的web.config里启用了目录浏览功能,这事儿就好办了~ 下面给你一步步说清楚怎么实现:

核心原理

当你启用目录浏览后,访问https://IISserver/pictures/这个目录URL时,IIS会返回一个自动生成的HTML页面,里面列出了该目录下所有文件和子目录的链接。你的任务就是请求这个页面,然后解析HTML提取出所有图片的完整URL。

具体实现步骤

  1. 请求目录页面
    你需要把请求的URL换成目录地址https://IISserver/pictures/,而不是单个图片的URL。用你现有的HttpClient发起GET请求即可。

  2. 解析HTML提取图片链接
    因为返回的是HTML内容,直接字符串处理容易出错,推荐用.NET生态里常用的HtmlAgilityPack库来解析(需要先通过NuGet安装这个包)。

代码示例

using HtmlAgilityPack;
using System.Net.Http;
using System.Linq;
using System.Collections.Generic;
using System.Threading.Tasks;

// 建议HttpClient采用单例模式(避免频繁创建销毁导致套接字耗尽)
private static readonly HttpClient _httpClient = new HttpClient();

public async Task<List<string>> GetAllImageUrls()
{
    var directoryUrl = "https://IISserver/pictures/";
    List<string> imageUrls = new List<string>();

    try
    {
        HttpResponseMessage response = await _httpClient.GetAsync(directoryUrl);
        response.EnsureSuccessStatusCode(); // 确保请求成功,否则抛出异常

        string htmlContent = await response.Content.ReadAsStringAsync();
        HtmlDocument htmlDoc = new HtmlDocument();
        htmlDoc.LoadHtml(htmlContent);

        // 提取所有<a>标签的href属性,排除上级目录(../)和子目录(以/结尾的链接)
        var imageNodes = htmlDoc.DocumentNode.SelectNodes("//a[@href]")
            ?.Where(node => 
                !node.Attributes["href"].Value.Equals("../") && 
                !node.Attributes["href"].Value.EndsWith("/")
            );

        if (imageNodes != null)
        {
            foreach (var node in imageNodes)
            {
                // 拼接成完整的URL
                string fullUrl = new Uri(new Uri(directoryUrl), node.Attributes["href"].Value).ToString();
                imageUrls.Add(fullUrl);
            }
        }
    }
    catch (HttpRequestException ex)
    {
        // 处理请求异常,比如网络问题、权限限制等
        Console.WriteLine($"请求出错:{ex.Message}");
    }

    return imageUrls;
}

注意事项

  • 权限与配置检查:确保IIS的目录浏览功能确实生效,且该目录没有设置IP限制、身份验证等拦截规则,否则HttpClient可能会收到403/401等错误响应。
  • HttpClient最佳实践:不要每次请求都新建HttpClient,推荐使用单例模式(如上面代码所示),避免系统套接字资源耗尽。
  • 子目录处理:如果你的pictures目录下还有子目录,上面的代码会自动排除它们;如果需要递归获取子目录里的图片,你可以在代码里添加递归逻辑,遍历每个子目录的URL重复上述步骤。

内容的提问来源于stack exchange,提问作者Maddin

火山引擎 最新活动