IT박스

절대 URL인지 상대 URL인지 확인

itboxs 2020. 12. 15. 08:28
반응형

절대 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);
}

어떤 이유로 소유자가 몇 가지 좋은 답변을 삭제했습니다.

@Chamika Sandamal을 통해

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

반응형