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

Uri.GetComponents返回查询参数问题:如何提取不含参数的路径?

问题解答

现象是否正常?

这种现象是正常的。原因在于你把包含?和查询参数的完整字符串直接赋值给了UriBuilder.Path属性,而UriBuilder.Path仅用于存储URI的路径部分,它会将?视为路径的一部分进行转义(转为%3F),不会将其识别为查询参数的分隔符。因此当你提取路径组件时,这些原本属于查询参数的内容会被当作路径的一部分返回。

提取纯路径的方法

方法1:直接拆分字符串

通过查找?的位置截取纯路径,简单直接:

var ps = new PathString("/someapi/wayne/insane?param=1234&ups=134");
var questionMarkPos = ps.Value.IndexOf('?');
var purePath = questionMarkPos >= 0 ? ps.Value.Substring(0, questionMarkPos) : ps.Value;
// purePath 结果:"/someapi/wayne/insane"

方法2:正确构造Uri解析

将完整的路径+查询字符串拼接成合法Uri,再提取路径部分:

var ps = new PathString("/someapi/wayne/insane?param=1234&ups=134");
if (Uri.TryCreate("http://localhost" + ps, UriKind.Absolute, out var uri))
{
    var purePath = uri.AbsolutePath;
    // purePath 结果:"/someapi/wayne/insane"
}

方法3:利用AspNetCore的PathString/QueryString拆分

如果使用ASP.NET Core,可以直接用框架提供的方法拆分路径和查询字符串:

var fullString = "/someapi/wayne/insane?param=1234&ups=134";
var path = PathString.FromUriComponent(fullString);
var query = QueryString.FromUriComponent(fullString);
// path.Value 结果:"/someapi/wayne/insane"

内容的提问来源于stack exchange,提问作者greg-e

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 10:12:23