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

Ошибка WebRequest.GetResponse() 401: Неавторизованный

У меня есть приложение ASP.NET, где я пытаюсь вывести ранее посещаемую локальную страницу aspx в html (ее отчет, и я хочу сохранить статическую html-копию его в виде архива). Я храню uri локальной страницы с помощью:

Session["SummaryURI"] = Request.Url.AbsoluteUri;

а затем на следующей странице я получаю его с помощью:

string url = Session["SummaryURI"].ToString();

url = url.Replace("static=false", "static=true");
//MessageLabel.Text = url;

//CREATE THE NEW FILE
WebRequest req = WebRequest.Create(url);
WebResponse res = req.GetResponse();

Часть req.GetResponse() - это то, где я получаю свою ошибку (401 Unauthorized).

Нужно ли мне что-то настраивать в IIS, чтобы это разрешить?

Нужно ли мне редактировать права доступа к файлам или что-то в этом роде?

Спасибо за помощь

Кстати, это отлично работает на моем локальном IIS, но не на моем тестовом сервере.

4b9b3361

Ответ 1

В настоящее время у меня нет доступа к настройкам IIS, поэтому я не смог включить Anonymous Authentication, что очень возможно, почему ответ Cybernate не работал на меня. Однако я нашел более простой метод, который сработал. Вместо использования WebRequest я обнаружил, что могу сделать то же самое с Server.Execute. Ниже мое новое решение:

string strHTML = String.Empty;
using (var sw = new StringWriter())
{
    Server.Execute([path-to-local-aspx], sw);
    strHTML = sw.ToString();
}

string relativeReportPath = [relative-path-to-new-html-file];

using (StreamWriter writer = File.CreateText(Server.MapPath(relativeReportPath)))
{
    writer.WriteLine(strHTML);
    MessageLabel.Text = "Your report is ready. Click Close to close the window.";
}

Ответ 2

Если вы не можете включить анонимную проверку подлинности, попробуйте добавить это в свой WebRequest:

req.UseDefaultCredentials = true;
req.PreAuthenticate = true;
req.Credentials = CredentialCache.DefaultCredentials;

Ответ 3

Я думаю, что проблема связана с проверкой подлинности на тестовом сервере IIS. Два варианта:

1) Включите "Анонимную аутентификацию" для сайта на тестовом сервере IIS.

2) (рекомендуется)  Перед тем, как сделать запрос для тестирования сервера, используйте шаблон кода ниже с правом имени пользователя/пароля/информации о домене, которая может быть аутентифицирована на тестовом сервере.

System.Net.NetworkCredential netCredential = 
        new System.Net.NetworkCredential("<USER_NAME>", "<PASSWORD>", "<DOMAIN>");
req.Credentials = netCredential;