Недопустимый URI: не удалось проанализировать имя хоста.

Я пытаюсь построить URI. Но я не могу обрабатывать плохие URI.

Есть ли способ справиться с неправильными URI?

Код, который я использую:

if (reviews[e.Item.ItemIndex].URL.ToString().Contains("http:"))
{
      oURI = new Uri(reviews[e.Item.ItemIndex].URL.ToString());
}
else 
{
   oURI = new Uri("http://"+ reviews[e.Item.ItemIndex].URL.ToString());
}

Часть else выдает ошибку из-за неверных URI.

Спасибо!


person kumar    schedule 16.11.2010    source источник
comment
Если вы используете тег Code Sample, вам будет намного легче читать это.   -  person Jeramy Rutley    schedule 16.11.2010


Ответы (5)


Вызовите Uri.TryCreate:

string original = reviews[e.Item.ItemIndex].URL.ToString();
if (!original.StartsWith("http:"))
    original = "http://" + original;
Uri uri;
if (!Uri.TryCreate(original, UriKind.Absolute, out uri)) {
    //Bad bad bad!
}
person SLaks    schedule 16.11.2010
comment
Круто, я не знал, что он существует. Я удалил свой пост, так как ваш пост кажется лучшим ответом. - person Cédric Guillemette; 16.11.2010

У меня был пробел после «http://», например http://exampleServer/exampleservice.svc, который вызвал эту ошибку.

person Dev    schedule 26.05.2017

Для всех это может быть проблемой. У меня было Invalid URI: The hostname could not be parsed на некоторых URL-адресах, а на некоторых URL-адресах это не приходило.

Я рассмотрел проблему создания URL, they had '\' instead of '/' in urls,

поэтому при разборе URI выдает ошибку.

person Suhail Mumtaz Awan    schedule 24.09.2020

Я получил аналогичную ошибку с nginx fastcgi-mono-server4. Оказывается, веб-сервер предоставил значение регулярного выражения для SERVER_NAME. Поэтому я должен исправить это на сервере, заменив fastcgi_param SERVER_NAME $server_name; на fastcgi_param SERVER_NAME $host;

person l0pan    schedule 19.12.2016

Я столкнулся с аналогичной ошибкой при попытке создать объект URI на С#. Для меня проблема была в длине.

person maicalal    schedule 05.05.2020