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

ASP.NET Core中Uri.EscapeDataString转/为%2F的解决办法咨询

解决方案:保留路径分隔符"/"的URI编码方法

你的核心问题是对整个字符串做了全编码,把作为路径分隔符的"/"也转成了%2F,导致图片路径失效。因为UrlEncode和EscapeDataString的作用是编码整个字符串作为单个URI组件,而你的场景里"/"是路径的分隔符,不属于需要编码的特殊字符,所以得换分段编码的思路:

方法1:分段编码路径片段

把原始路径按"/"分割成单个片段,只对每个片段做编码,再用"/"拼接回去,这样就能保留路径分隔符:

public string StringConvert()
{
    // 修正你原代码里的变量名错误:定义了decoded却用了encoded
    string originalPath = "Example/of/string";
    // 按路径分隔符拆分
    var pathSegments = originalPath.Split('/');
    // 对每个片段单独编码(处理片段里的特殊字符,比如空格、中文等)
    var encodedSegments = pathSegments.Select(segment => Uri.EscapeDataString(segment));
    // 用/拼接回完整路径
    return string.Join("/", encodedSegments);
}

比如如果你的路径是Example/of/字符串 with 空格,处理后会变成Example/of/%E5%AD%97%E7%AC%A6%E4%B8%B2%20with%20%E7%A9%BA%E6%A0%BC,既保留了"/",又正确编码了片段里的特殊字符。

方法2:用UriBuilder构建完整URL(推荐)

如果是生成完整的图片URL,用UriBuilder会更规范,它会自动处理路径片段的编码,同时保留路径结构:

public string BuildImageUrl()
{
    // 基础图片域名/路径
    var builder = new UriBuilder("https://your-site.com/images");
    // 追加路径片段,Path.Combine会自动处理分隔符
    builder.Path = Path.Combine(builder.Path, "Example", "of", "string with spaces");
    // 生成最终URL,自动完成正确编码
    return builder.Uri.ToString();
}

注意事项

  1. ASP.NET Core里尽量避免用System.Web.HttpUtility,这是.NET Framework的旧API,推荐用Uri.EscapeDataString或者WebUtility.UrlEncode(后者更适合编码查询参数)。
  2. 只有当"/"是普通字符(不是路径分隔符)时才需要编码,你的场景显然是路径结构,所以必须保留"/"作为分隔符。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 19:15:52