C#如何使用URI相等



一些测试:

这是ture:

    [Fact]
    public void UriEqualTest()
    {
        //Act
        var uri1 = new Uri("https://www.baidu.com");
        var uri2 = new Uri("https://www.baidu.com/");
        var boolResult = uri2.Equals(uri1);
        //Assert
        Assert.Equal(uri1, uri2);
        Assert.True(boolResult);//True
    }

这是ture:

    [Fact]
    public void UriUpperEqualTest()
    {
        //Act
        var uri1 = new Uri("https://wWw.bAidu.com");
        var uri2 = new Uri("https://www.baidu.com/");
        var boolResult = uri2.Equals(uri1);
        var operatorResult = (uri1 == uri2);
        //Assert
        Assert.Equal(uri1, uri2);
        Assert.True(boolResult);//True
    }

这是错误的:

    [Fact]
    public void UrlEqualTest()
    {
        //Act
        var uri1 = new Uri("https://www.baidu.com/aaaa/bbbb");
        var uri2 = new Uri("https://www.baidu.com/aaaa/bbbb/");
        var boolResult = uri2.Equals(uri1);
        //Assert
        Assert.Equal(uri1, uri2);
        Assert.True(boolResult);//False
    }

这是错误的:

    [Fact]
    public void UrlUpperEqualTest()
    {
        //Act
        var uri1 = new Uri("https://www.baidu.com/AAaa/bbbb");
        var uri2 = new Uri("https://www.baidu.com/aAAa/bbbb");
        var boolResult = uri2.Equals(uri1);
        var operatorResult = (uri1 == uri2);
        //Assert
        Assert.Equal(uri1, uri2);
        Assert.True(boolResult);//False
    }

这是真的:

    [Fact]
    public void UriUpperEqualAndPathTest()
    {
        //Act
        var uri1 = new Uri("https://www.baiDu.com/aaaa/bbbb");
        var uri2 = new Uri("https://www.Baidu.com/aaaa/bbbb");
        var boolResult = uri2.Equals(uri1);
        //Assert
        Assert.Equal(uri1, uri2);
        Assert.True(boolResult);//True
    }

那么,主机不敏感吗?但是路径案例敏感??

我想要所有的uri点不敏感和dot not case'/',我该怎么办?

我想要所有的uri点不敏感和dot not case'/',我该怎么办?

我想要所有的uri点不敏感和dot not case'/',我该怎么办?

和在Aspnet Core MVC中,如果我使用路线

[HttpGet("/private/head")] and [HttpGet("/private/HeAd")] and [HttpGet("/private/head/")]

这是错误!错误是: AmbiguousActionException: Multiple actions matched. The following actions matched route data and had all constraints satisfied:

https://stackoverflow.com/a/2581418/34092状态:

就协议而言,http://example.com/something和 http://example.com/something/是完全不同的。可能会有一些服务器 如果您以这种方式实现,将您从一个重定向到另一个。

至于纯域名,它总是发送一个请求,以结尾 削减。(域名本身不包括在路径部分 就像格雷格·赫吉尔(Greg Hewgill)和其他人所写的那样,HTTP请求。这是, 但是,包含在标题中。)

所以,查看您的示例:

    var uri1 = new Uri("https://www.baidu.com");
    var uri2 = new Uri("https://www.baidu.com/");

它们是相同的,因为always sends a request ending with a slash。因此,它们是等效的。

https://serverfault.com/a/261344状态:

从DNS中解析的名称不敏感。这对 防止混乱。

    var uri1 = new Uri("https://wWw.bAidu.com");
    var uri2 = new Uri("https://www.baidu.com/");

因此,两者是等效的(因为它们仅因情况而差异,而主机之后的斜线也是如此)。

    var uri1 = new Uri("https://www.baidu.com/aaaa/bbbb");
    var uri2 = new Uri("https://www.baidu.com/aaaa/bbbb/");

好吧,这似乎是第一种情况,但事实并非如此。第一种情况将它们视为等效的,因为它是"纯域名"(即主机之后的直接域名)。这是不同的(即,斜线在末端,而不是直到主机之后),因此它们并不等于(在所有Web服务器上)。因此不相等。

    var uri1 = new Uri("https://www.baidu.com/AAAaa/bbbb");
    var uri2 = new Uri("https://www.baidu.com/aAAa/bbbb");

路径和问题对案例敏感。因此,这些不是平等的。某些Web服务器/编程环境(例如ASP.NET MVC)可能对病例不敏感,但根据规格,路径和Querystring对案例敏感(因为某些Web服务器 case> case敏感的)。

    var uri1 = new Uri("https://www.baiDu.com/aaaa/bbbb");
    var uri2 = new Uri("https://www.Baidu.com/aaaa/bbbb");

唯一的区别是主机的情况。因此它们是相等的。

这是错误!错误是:模棱两可的ActionAcception:多个动作 匹配。以下操作与路线数据匹配,并具有全部 满足约束:

这是因为ASP.NET MVC通常不敏感。ASP.NET MVC中的强制案例敏感路由可能对您的问题的这一部分有用。

相关内容

  • 没有找到相关文章

最新更新