小编Max*_*don的帖子

如何在 .NET 中表示 URN(统一资源名称),以便 Equals 按预期工作

RFC2141提到:

  1. 词汇等价的例子

    以下 URN 比较突出显示了词汇等价
    定义:

        1- URN:foo:a123,456
        2- urn:foo:a123,456
        3- urn:FOO:a123,456
        4- urn:foo:A123,456
        5- urn:foo:a123%2C456
        6- URN:FOO:a123%2c456
    
    Run Code Online (Sandbox Code Playgroud)

    URN 1、2 和 3 在词法上都是等效的。

随后的RFC8141保留了该等价性:

2.1. 命名空间标识符 (NID)

NID 不区分大小写(例如,“ISBN”和“isbn”是等效的)。

我可以在 .NET 框架中轻松找到的最接近的 URN 表示形式是URI 类。然而,它似乎并没有完全尊重 RFC 的等效定义:

    [TestMethod]
    public void TestEquivalentUrnsAreBroken()
    {
        Assert.AreEqual(
            new Uri("URN:foo:a123,456"),
            new Uri("urn:foo:a123,456"));

        Assert.AreEqual(
            new Uri("urn:foo:a123,456"),
            new Uri("urn:FOO:a123,456"));
    }
Run Code Online (Sandbox Code Playgroud)

在上面的代码示例中,第一个断言按预期工作,而第二个断言失败。

是否有任何合理的方法可以让 URI 类遵守等效定义?我应该使用其他课程吗?

请注意,我已经找到了URN 类,但文档提到不应直接使用它。

.net c# frameworks uri urn

6
推荐指数
1
解决办法
2157
查看次数

标签 统计

.net ×1

c# ×1

frameworks ×1

uri ×1

urn ×1