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

如何仅从片段创建System.Uri对象?Svg.NET开发场景问题

如何仅从片段创建System.Uri对象(适配Svg.NET的SvgTextPath.ReferencedPath)

问题说明

直接执行new System.Uri("#something", UriKind.Relative)创建仅含片段的Uri时,无论指定相对还是绝对模式都会抛出异常。在使用Svg.NET构建SvgTextPath对象时,ReferencedPath属性要求传入System.Uri类型值,但实际需要赋值的是SVG路径元素的ID(符合SVG规范中textPath元素的引用要求),无法直接传入字符串ID,因此需要找到将元素ID转换为合法Uri的方法。

可行解决方案

方法1:基于空基Uri构造片段Uri

通过一个空的绝对Uri作为基础,使用Uri.TryCreate方法拼接片段,即可生成合法的Uri对象:

var baseUri = new Uri("http://tempuri.org/");
Uri fragmentUri;
if (Uri.TryCreate(baseUri, "#pathId", out fragmentUri))
{
    textPath.ReferencedPath = fragmentUri;
}

方法2:使用UriBuilder直接构造

利用UriBuilder的Fragment属性设置ID(无需手动加#,UriBuilder会自动处理),再转换为Uri:

var builder = new UriBuilder();
builder.Fragment = "pathId";
var fragmentUri = builder.Uri;
textPath.ReferencedPath = fragmentUri;

原理补充

System.Uri的构造逻辑不允许直接创建仅包含片段的独立Uri(片段本身无法构成有效的相对或绝对Uri)。但通过绑定一个空的基地址,或者借助UriBuilder间接构造,就能生成符合要求的Uri对象,其Fragment属性正好对应SVG元素的ID,完全适配Svg.NET的ReferencedPath属性需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 07:52:14