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

.NET Framework 4.8 WebAPI路由:如何获取含斜杠的path参数?

解决.NET Framework 4.8 WebAPI路由中含斜杠的参数匹配问题

针对你的场景,有两种可行的解决方案:

方案一:使用正则路由约束修改路由属性

在路由参数path上添加非贪婪正则约束,让它匹配到/child之前的所有内容(包括斜杠),修改后的路由定义如下:

[Route("gdoc/a/G1/{code}/{path:regex(.*?)}/child")]
public IHttpActionResult YourApiMethod(string code, string path)
{
    // 此时path变量会完整获取到带斜杠的路径值,比如"5-787/folder1/james/titi.png"
    return Ok(path);
}

原理:正则.*?是非贪婪匹配模式,会精准匹配从{code}之后到/child之前的所有字符,包括路径中的斜杠,避免路由引擎将斜杠视为分段符。

方案二:手动解析请求URL提取参数

如果正则约束无法生效,可以直接在方法内解析原始请求URL,手动截取目标路径部分:

[Route("gdoc/a/G1/{code}/child")]
public IHttpActionResult YourApiMethod(string code)
{
    var requestPath = Request.RequestUri.AbsolutePath;
    var codePrefix = $"/gdoc/a/G1/{code}/";
    var childSuffix = "/child";

    var startPos = requestPath.IndexOf(codePrefix) + codePrefix.Length;
    var endPos = requestPath.IndexOf(childSuffix, startPos);

    if (endPos == -1)
    {
        return BadRequest("URL格式不符合要求");
    }

    var path = requestPath.Substring(startPos, endPos - startPos);
    // 处理获取到的path
    return Ok(path);
}

原理:跳过路由参数的自动匹配,直接从请求路径中定位code之后、/child之前的片段,提取出完整的带斜杠路径。

备选方案(需客户端配合)

如果可以调整客户端请求方式,让客户端将路径中的斜杠做URL编码(把/替换为%2F),服务端接收后再解码:

[Route("gdoc/a/G1/{code}/{path}/child")]
public IHttpActionResult YourApiMethod(string code, string path)
{
    var decodedPath = Uri.UnescapeDataString(path);
    // 使用解码后的路径
    return Ok(decodedPath);
}

这种方案需要客户端发送编码后的URL(比如https:/server/gdoc/a/G1/IDS/5-787%2Ffolder1%2Fjames%2Ftiti.png/child),适合能控制客户端实现的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 04:26:04