[英]C# How to use Uri equal?
一些测试:
这是真的:
[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
}
这是真的:
[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都不区分大小写并且不是'/',我该怎么办?
而且我希望所有Uri dot都不区分大小写并且不是'/',我该怎么办?
而且我希望所有Uri dot都不区分大小写并且不是'/',我该怎么办?
在aspnet核心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:
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/完全不同。 如果以这种方式实现,某些服务器可能会将您从一个重定向到另一个服务器。
至于纯域名,它总是发送以斜杠结尾的请求。 (域名本身不包含在HTTP请求的路径部分中,就像Greg Hewgill和其他人写的那样。但是,它包含在标题中。)
那么,看看你的例子:
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)可作用不区分大小写的,但是根据规范的路径和查询字符串是区分大小写(因为某些Web服务器是区分大小写)。
var uri1 = new Uri("https://www.baiDu.com/aaaa/bbbb");
var uri2 = new Uri("https://www.Baidu.com/aaaa/bbbb");
唯一的区别是主机的情况。 因此他们是平等的。
这是错误的! 错误是:AmbiguousActionException:匹配多个动作。 以下操作匹配路由数据并满足所有约束:
这是因为ASP.NET MVC 通常不区分大小写。 在ASP.NET MVC中强制区分大小写的路由可能对您的问题的这一部分有用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.