development

URL을 작성하는 방법은 무엇입니까?

big-blog 2020. 12. 5. 10:09
반응형

URL을 작성하는 방법은 무엇입니까?


Url을 작성할 수 있도록 .NET에서 사용할 수있는 도우미 클래스가 있습니까?

예를 들어 사용자가 문자열을 입력하는 경우 :

stackoverflow.com

그리고 나는 그것을 전달하려고 HttpWebRequest:

WebRequest.CreateHttp(url);

유효한 URL이 아니기 때문에 실패합니다 (접두사가 없음).

내가 원하는 것은 사용자가 입력 한 부분 URL을 구문 분석 할 수있는 것입니다.

Uri uri = new Uri(url);

그런 다음 누락 된 부분을 수정합니다.

if (uri.Port == 0)
   uri.Port = 3333;
if (uri.Scheme == "")
   uri.Scheme = "https";

.NET에는 Uri를 구문 분석하고 조작하는 데 사용할 수있는 클래스가 있습니까?

UriBuilder 클래스는 작업을 수행 할 수 없습니다.

사용자가 입력 한 값 (예 :) stackoverflow.com:3333이 유효합니다. 나는 그것을 쪼개는 수업이 필요합니다. 나는 수업을 사용해 보았습니다UriBuilder .

UriBuilder uriBuilder = new UriBuilder("stackoverflow.com:3333");

불행히도 UriBuilder 클래스는 URI를 처리 할 수 ​​없습니다.

  • uriBuilder.Path = 3333
  • uriBuilder.Port = -1
  • uriBuidler.Scheme = stackoverflow.com

내가 클래스를 필요 그래서 이해할 수있는 host:port경우에 특히 중요하게되는, 그것은 특히 아니다 http,하지만 될 수있다 .

보너스 채터

콘솔 애플리케이션.

다른 질문에서

파싱이 필요한 URL의 몇 가지 예 :

  • server:8088
  • server:8088/func1
  • server:8088/func1/SubFunc1
  • http://server
  • http://server/func1
  • http://server/func/SubFunc1
  • http://server:8088
  • http://server:8088/func1
  • http://server:8088/func1/SubFunc1
  • magnet://server
  • magnet://server/func1
  • magnet://server/func/SubFunc1
  • magnet://server:8088
  • magnet://server:8088/func1
  • magnet://server:8088/func1/SubFunc1

URL 형식은 다음과 같습니다.

  foo://example.com:8042/over/there?name=ferret#nose
  \_/   \_________/ \__/\_________/\__________/ \__/
   |         |        |     |           |        |
scheme      host    port   path       query   fragment

사용자 입력으로 오는 일부 문자열이 유효한 URL인지 확인해야하는 경우 다음 Uri.TryCreate방법을 사용할 수 있습니다 .

Uri uri;
string someUrl = ...
if (!Uri.TryCreate(someUrl, UriKind.Absolute, out uri))
{
    // the someUrl string did not contain a valid url 
    // inform your users about that
}
else
{
    var request = WebRequest.Create(uri);
    // ... safely proceed with executing the request
}

다른 한편으로 .NET에서 URL을 작성하려는 UriBuilder경우 해당 목적을 위해 특별히 설계된 클래스가 있습니다. 예를 들어 보겠습니다. 다음 URL을 작성하려고한다고 가정합니다. http://example.com/path?foo=bar&baz=bazinga#some_fragment여기서 barbazinga값은 사용자로부터 제공됩니다.

string foo = ... coming from user input
string baz = ... coming from user input

var uriBuilder = new UriBuilder("http://example.com/path");
var parameters = HttpUtility.ParseQueryString(string.Empty);
parameters["foo"] = foo;
parameters["baz"] = baz;
uriBuilder.Query = parameters.ToString();
uriBuilder.Fragment = "some_fragment";

Uri finalUrl = uriBuilder.Uri;
var request = WebRequest.Create(finalUrl);
... safely proceed with executing the request

UriBuilder 클래스를 사용할 수 있습니다 .

var builder = new UriBuilder(url);
builder.Port = 3333
builder.Scheme = "https";

var result = builder.Uri;

To be valid a URI needs to have the scheme component. "server:8088" is not a valid URI. "http://server:8088" is. See https://tools.ietf.org/html/rfc3986

참고URL : https://stackoverflow.com/questions/20164298/how-to-build-a-url

반응형