2
我正在使用OAuth類型模塊。在這裏,我有一組被稱爲白名單網址的網址。我必須檢查指定的回調URL是否與集合中的任何這些URL匹配。回調URL匹配邏輯
我寫了下面的代碼。請讓我知道我做的是否正確,或者我是否缺少一些步驟。另外,如果我想單元測試這些方法,請讓我知道是否需要任何重構。
的代碼是:
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));
}
}
預先感謝。
問候, Suyog
Uri.Compare將匹配確切的Url。對於例如如果url完全匹配,它將返回0。我不想要這個。我想要的是http://foo.com/a/b應該返回一個匹配,如果我將它與http://foo.com/a進行比較,或反之亦然 –
它需要UriComponents按位枚舉來定義uri的哪些組件比較:http://msdn.microsoft.com/en-us/library/7767559y.aspx – bryanmac
所以你使用Uri.Compare然後進行後續的路徑比較。我會更新。 – bryanmac