Подтвердить что ты не робот

Как создать URL?

Есть ли какие-либо вспомогательные классы, доступные в .NET, чтобы я мог создать Url?

Например, если пользователь вводит строку:

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's?

Класс 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, но может быть.

Бонус Chatter

Консольное приложение.

Из другого вопроса

Некоторые примеры 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
4b9b3361

Ответ 1

Если вам нужно убедиться, что некоторая строка, поступающая как пользовательский ввод, является действительным 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
}

Теперь, если вы хотите создавать URL-адреса в .NET, это класс UriBuilder, специально предназначенный для этой цели. Возьмем пример. Предположим, вы хотели создать следующий URL: http://example.com/path?foo=bar&baz=bazinga#some_fragment, где значения bar и bazinga поступают от пользователя:

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

Ответ 2

Вы можете использовать класс UriBuilder.

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

var result = builder.Uri;