C# 回调URL匹配逻辑
我正在开发OAuth类型的模块。在这里,我有一个URL集合,称为白名单URL。我必须检查指定的回调URL是否与集合中的任何URL匹配 我已经编写了以下代码。请让我知道我做得是否正确,或者我是否遗漏了一些步骤。另外,如果我想对这些方法进行单元测试,请告诉我是否需要重构 代码是:C# 回调URL匹配逻辑,c#,.net,http,url,uri,C#,.net,Http,Url,Uri,我正在开发OAuth类型的模块。在这里,我有一个URL集合,称为白名单URL。我必须检查指定的回调URL是否与集合中的任何URL匹配 我已经编写了以下代码。请让我知道我做得是否正确,或者我是否遗漏了一些步骤。另外,如果我想对这些方法进行单元测试,请告诉我是否需要重构 代码是: public class ValidateURLs { public bool MatchRedirectUrl(string requestUrl, IList<string> urlCollecti
public class ValidateURLs
{
public bool MatchRedirectUrl(string requestUrl, IList<string> urlCollection)
{
var requestUri = new Uri(requestUrl);
foreach (var url in urlCollection)
{
var matchUri = new Uri(url);
if (IsDomainMatching(requestUri, matchUri))
{
if (IsPortMatch(requestUri, matchUri))
{
if (IsPathMatch(requestUri, matchUri))
return true;
else
return false;
}
}
}
return false;
}
private bool IsDomainMatching(Uri url1, Uri url2)
{
var result = String.Compare(url1.Host, url2.Host);
if (result == 0)
return true;
else
return false;
}
private bool IsPortMatch(Uri url1, Uri url2)
{
if (url1.Port == url2.Port)
return true;
return false;
}
private bool IsPathMatch(Uri url1, Uri url2)
{
return (url1.PathAndQuery.StartsWith(url2.PathAndQuery) || url2.PathAndQuery.StartsWith(url1.PathAndQuery));
}
}
公共类ValidateURLs
{
public bool MatchRedirectUrl(字符串requestUrl,IList urlCollection)
{
var requestUri=新的Uri(requestUrl);
foreach(urlCollection中的变量url)
{
var matchUri=新Uri(url);
if(IsDomainMatching(请求URI,匹配URI))
{
if(IsPortMatch(requestUri,matchUri))
{
if(IsPathMatch(requestUri,matchUri))
返回true;
其他的
返回false;
}
}
}
返回false;
}
私有布尔值IsDomainMatching(Uri url1,Uri url2)
{
var result=String.Compare(url1.Host,url2.Host);
如果(结果==0)
返回true;
其他的
返回false;
}
私有bool-IsPortMatch(Uri url1,Uri url2)
{
if(url1.Port==url2.Port)
返回true;
返回false;
}
私有bool-IsPathMatch(Uri url1、Uri url2)
{
return(url1.PathAndQuery.StartsWith(url2.PathAndQuery)| | url2.PathAndQuery.StartsWith(url1.PathAndQuery));
}
}
提前谢谢
问候,,
Suyog与其编写所有这些代码,不如看看 但您也希望path.startswith成为比较的一部分。请注意,需要按位枚举UriComponents来定义要比较的url组件。因此,您可以用Uri替换大部分代码。比较不比较路径,然后有一个startsWith path and 因此,您的所有代码都可以替换为以下内容:
Uri.Compare(uri1, uri2, UriComponents.HostAndPort, ...) == 0 &&
(url1.PathAndQueryStartsWith(url2.PathAndQuery) || url.PathAndQueryStartsWith(...));
在旁注中,此表格中的代码:
var result = String.Compare(url1.Host, url2.Host);
if (result == 0)
return true;
else
return false;
可以简单地写为:
return String.Compare(url1.Host, url2.Host) == 0;
您还应该与以下内容进行不区分大小写的比较:StringComparison.OrdinalIgnoreCaseUri.Compare将匹配准确的Url。例如,如果url完全匹配,则返回0。我不要这个。我想要的是,如果我将其与进行比较,则应该返回一个匹配项,反之亦然,需要UriComponents按位枚举来定义要比较的uri的哪些组件:因此使用uri.compare,然后使用后续的路径比较。我会更新的。你的逻辑是有道理的。还有,我还需要做什么来获得url匹配?