Я работаю над модулем типа OAuth. В этом я имею набор URL-адресов, которые называются URL-адресами «Белый список». Я должен проверить, соответствует ли 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 будет соответствовать точному адресу. Напр. он вернет 0, если URL точно совпадает. Я не хочу этого. то, что я хочу, это http://foo.com/a/b должен вернуть совпадение, если я сравню его с http://foo.com/a или наоборот –
Требуется, чтобы UriComponents побитовое перечисление определяло, какие компоненты uri для сравнения: http://msdn.microsoft.com/en-us/library/7767559y.aspx – bryanmac
Итак, вы используете Uri.Compare, а затем последующий путь сравнения. Я обновлю. – bryanmac