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

Поэтому я попробовал это в нескольких разных форматах и ​​дал разные результаты. Я включу всю соответствующую информацию ниже.

Моя компания использует веб-приложение для планирования генерации отчетов. Служба отправляет по электронной почте URL-адрес, по которому можно щелкнуть, и сразу же откроется диалоговое окно "Открыть как отменить". Я пытаюсь автоматизировать процесс загрузки этих отчетов с помощью сценария C# в рамках проекта Visual Studio (конечная цель - импортировать эти отчеты в SQL Server).

Я сталкиваюсь с ужасной трудностью при запуске загрузки этого файла с помощью WebClient. Вот наиболее близкий вариант, который я получил с любым из методов, которые я пробовал:

* ПРИМЕЧАНИЕ. Я удалил всю идентифицирующую информацию из URL, но оставил все специальные символы и базовую архитектуру без изменений. Надеюсь, это будет удачное средство защиты конфиденциальной информации и предоставления вам достаточного количества информации, чтобы понять мою дилемму. URL работает, когда вручную копируется и вставляется в адресную строку Internet Explorer.

Сообщение об ошибке:

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

public void Main()
{
using (var wc = new System.Net.WebClient())
{
wc.DownloadFile(
new Uri(@"http:\\webapp.locality.company.com\scripts\rds\cgigetf.exe?job_id=3058352&file_id=1&format=TAB\report.tab"), 
@"\\server\directory\folder1\folder2\folder3\...\...\...\rawfile.tab");
        }
   }

Обратите внимание, что я попытался установить:

        string sourceUri = @"http:\\webapp.locality.company.com\scripts\rds\cgigetf.exe?job_id=3058352&file_id=1&format=TAB\report.tab\abc123_3058352.tab";
        Uri uriPath;
        Uri.TryCreate(sourceUri, UriKind.Absolute, out uriPath);

Но uriPath остается нулевым - TryCreate не работает.

Я попытался сделать webrequest / webresponse / WebStream, но он все еще не может найти хост.

Я попытался включить URL-адрес загрузки (как в моем первом примере кода) и URL-адрес загрузки + имя файла (как в моем втором примере кода). Мне не нужно имя файла в URL, чтобы начать загрузку, если я делаю это вручную. Я также пытался заменить часть URL-адреса "report.tab" именем файла, но безрезультатно.

Помощь очень ценится, поскольку у меня просто кончились мысли по этому поводу. Единственная идея, которую я оставил, заключается в том, что, возможно, один из специальных символов в моем URL мешает, но я не знаю, какой это будет или как правильно с ним обращаться.

Заранее спасибо!

1 ответ

Решение

Первой моей мыслью было бы то, что обратные слеши вашего URI интерпретируются как escape-символы, что приводит к бессмысленному результату после оценки. Я хотел бы попробовать быстрый тест, где каждый обратный слэш экранируется как сам по себе (то есть "\" вместо "\" в каждом случае). Я также немного озадачен тем, почему ваш URI не использует косую черту...?

// Create an absolute Uri from a string.
Uri absoluteUri = new Uri("http://www.contoso.com/");

Ссылка: Uri Конструктор на MSDN

Другие вопросы по тегам