You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET Core C#开发中如何根据商品ID匹配对应命名的图片存储目录

C# 商品图片目录匹配问题解决方案

报错原因

你第二次写的代码存在两个逻辑错误:

  1. Path.GetFileName(d)返回的是字符串类型,调用Where()方法遍历字符串时,每次迭代的变量d是单个字符,自然无法调用Split方法
  2. First()方法需要传入返回布尔值的断言委托,而不是Where()返回的集合类型,不符合方法参数要求

正确实现代码

核心逻辑是仅拆分目录名的第一个下划线,取前缀和商品ID做精确匹配,既避免前缀匹配的误判问题,也不会受商品名中包含下划线的影响:

// 提前转好字符串,避免循环中重复转换
var articleIdStr = articleId.ToString();
// 注意:原代码中的Enviroment为拼写错误,正确拼写为Environment
var rootPath = Path.Combine(Environment.WebRootPath, "Images", "Articles");

var targetDirectory = Directory.GetDirectories(rootPath)
    .First(dir => 
    {
        var dirName = Path.GetFileName(dir);
        // 只拆分第一个下划线,最多返回两个分段
        var nameSegments = dirName.Split('_', 2);
        // 先判断分段数是否符合命名规则,再匹配ID
        return nameSegments.Length >= 2 && nameSegments[0] == articleIdStr;
    });

落地优化建议

  • 异常兼容处理:把First()换成FirstOrDefault(),匹配不到目录时返回空,你可以自定义兜底逻辑,比如返回默认占位商品图,避免直接抛出未处理异常导致接口报错
  • 性能优化:商品目录创建后基本不会修改名称,你可以把「商品ID-目录路径」的映射关系存入内存缓存,新增/删除商品时再更新缓存,不用每次请求都遍历所有目录,高并发场景下性能提升非常明显
  • 鲁棒性优化:创建商品目录时,提前过滤掉商品名中包含的路径非法字符(\/:*?"<>|),避免创建目录失败或者后续匹配出错

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 06:36:05