반응형
절대 URL인지 상대 URL인지 확인
문자열에 상대 또는 절대 URL이 있습니다. 먼저 그것이 절대적인지 상대적인지 알아야합니다. 어떻게해야합니까? 그런 다음 URL의 도메인이 허용 목록에 있는지 확인하고 싶습니다.
예를 들어 다음은 허용 목록입니다.
string[] Allowed =
{
"google.com",
"yahoo.com",
"espn.com"
}
상대인지 절대인지 알면 상당히 간단하다고 생각합니다.
if (Url.IsAbsolute)
{
if (!Url.Contains("://"))
Url = "http://" + Url;
return Allowed.Contains(new Uri(Url).Host);
}
else //Is Relative
{
return true;
}
bool IsAbsoluteUrl(string url)
{
Uri result;
return Uri.TryCreate(url, UriKind.Absolute, out result);
}
어떤 이유로 소유자가 몇 가지 좋은 답변을 삭제했습니다.
Uri.IsWellFormedUriString(url, UriKind.Absolute)
과
Uri.IsWellFormedUriString(url, UriKind.Relative)
UriParser 비아들 및 구현 @Marcelo 칸토
UriBuilder
상대 및 절대 URI를 모두 처리 할 수있는 보다 직접적으로 원하는 것을 얻을 수 있습니다 (아래 예제 참조).
@icktoofay도 좋은 지적을합니다. www.google.com
허용 된 목록에 하위 도메인 (예 :)을 포함 하거나 builder.Host
속성에서 더 많은 처리를 수행 하여 실제 도메인을 가져와야 합니다. 더 많은 처리를하기로 결정한 경우 .NET과 같은 복잡한 TLD가있는 URL을 잊지 마십시오 bbc.co.uk
.
using System;
using System.Linq;
using System.Diagnostics;
namespace UriTest
{
class Program
{
static bool IsAllowed(string uri, string[] allowedHosts)
{
UriBuilder builder = new UriBuilder(uri);
return allowedHosts.Contains(builder.Host, StringComparer.OrdinalIgnoreCase);
}
static void Main(string[] args)
{
string[] allowedHosts =
{
"google.com",
"yahoo.com",
"espn.com"
};
// All true
Debug.Assert(
IsAllowed("google.com", allowedHosts) &&
IsAllowed("google.com/bar", allowedHosts) &&
IsAllowed("http://google.com/", allowedHosts) &&
IsAllowed("http://google.com/foo/bar", allowedHosts) &&
IsAllowed("http://google.com/foo/page.html?bar=baz", allowedHosts)
);
// All false
Debug.Assert(
!IsAllowed("foo.com", allowedHosts) &&
!IsAllowed("foo.com/bar", allowedHosts) &&
!IsAllowed("http://foo.com/", allowedHosts) &&
!IsAllowed("http://foo.com/foo/bar", allowedHosts) &&
!IsAllowed("http://foo.com/foo/page.html?bar=baz", allowedHosts)
);
}
}
}
참조 URL : https://stackoverflow.com/questions/4002692/determine-if-absolute-or-relative-url
반응형
'IT박스' 카테고리의 다른 글
보수가 printf를 통해 다르게 작동하는 이유는 무엇입니까? (0) | 2020.12.15 |
---|---|
Windows에서 MBCS와 UTF-8의 차이점 (0) | 2020.12.15 |
서명 계산을위한 HMAC-SHA256 알고리즘 (0) | 2020.12.15 |
yield를 사용한 재귀 (0) | 2020.12.15 |
mongodb 문서에서 부분 문자열을 바꾸는 방법 (0) | 2020.12.15 |