一些测试:
这是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中的强制案例敏感路由可能对您的问题的这一部分有用。