WebRequest.GetResponse () выдает ошибку 401: неавторизован - PullRequest
13 голосов
/ 07 апреля 2011

У меня есть приложение 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, но не на моем тестовом сервере.

Ответы [ 4 ]

24 голосов
/ 11 июля 2014

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

req.UseDefaultCredentials = true;
req.PreAuthenticate = true;
req.Credentials = CredentialCache.DefaultCredentials;
10 голосов
/ 07 апреля 2011

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

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

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

System.Net.NetworkCredential netCredential = 
        new System.Net.NetworkCredential("<USER_NAME>", "<PASSWORD>", "<DOMAIN>");
req.Credentials = netCredential;
3 голосов
/ 13 апреля 2011

На данный момент у меня нет доступа к настройкам 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.";
}
0 голосов
/ 20 мая 2019

Возможно, прокси беспокоит вас.Посмотрите здесь, чтобы увидеть, как его отключить: Как удалить прокси из WebRequest и оставить DefaultWebProxy нетронутым

Также, возможно, у вас отсутствует косая черта в конечной точке:

Endpoint = $"https://your.api.com/id=111<b>/</b>"; /* &#60;-- attention to the trailing slash */
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...