Я управляю старым веб-сайтом (сайтом, а не приложением), который представляет собой гибрид веб-форм и классического ASP. Классический ASP постепенно прекращается, но, вероятно, это произойдет через год. Прямо сейчас мы отказываемся от старой формы аутентификации в пользу аутентификации Windows в файле web.config.
Проблема в том, что я пытаюсь опубликовать сообщение на классической странице из кода веб-формы (http://www.blahsiblah.com/index.aspx
) и получаю ошибку 401.
var webClient = new WebClient();
var urlClassicASP = "http://www.blahsiblah.com/classic.asp";
var responseArray = webClient.UploadValues(urlClassicASP, "POST", nameValueCollection);
Это выдает «Удаленный сервер вернул ошибку: (401) Неавторизованный»
Мой вопрос: как я могу публиковать сообщения на классической странице, не вызывая аутентификацию стороны dotNet?
Есть несколько способов добиться этого Вот простое предложение, которое, я надеюсь, поможет
.Сеть Используйте 127.0.0.1 (или ваш внутренний 192.169/10.1*) IP-адрес для публикации на странице вместо общедоступного URL-адреса. Добавьте параметр (назовите его «bypassauth» или что-то уникальное) при отправке запроса на страницу ASP. Добавьте параметр, идентифицирующий пользователя, которого вы аутентифицировали на стороне .Net.
АСП Найдите включение, в котором происходит проверка аутентификации, и в этой проверке добавьте еще одно условие перед возвратом 401, которое проверяет две вещи. 1) Запрос с локального/внутреннего IP 2) Имеет параметр bypassauth 3) идентификатор пользователя действителен
Таким образом, ваш старый код ASP по-прежнему будет работать при запросе из браузера и ожидает, что пользователь будет аутентифицирован, однако при отправке запроса из .net вы сможете обойти аутентификацию.
Я уверен, что есть и другие идеи, но это только один из подходов.
Мое решение состояло в том, чтобы установить:
webClient.UseDefaultCredentials = true;