ASP.Net (C #) Как отправить по HTTPS со страницы HTTP - PullRequest
7 голосов
/ 06 марта 2009

C # 3.0 ASP.Net 2.0 IIS6

У меня есть обычная страница [не https]. На странице есть стандартная форма ASP.Net.

Однако на странице есть две «области» функциональности. Войти и «Получить цитату». Страница входа должна быть POST для HTTPS, в то время как остальная часть страницы [включая «другую область»] не может быть HTTPS. В Java [JSP] и обычном Html у нас было бы просто две формы. Тот, который отправляет сообщения по HTTPS, а другой - нет.

Как это сделать в ASP.Net [с одной страницы]. Я знаю, что могу ссылаться на HTTPS-страницу login.aspx, но бизнесу действительно нужен контекст.

Есть идеи?

Спасибо

Ответы [ 7 ]

3 голосов
/ 05 октября 2011

Решение состоит в том, чтобы использовать asp.net для указания «обратной передачи между страницами», то есть вы используете свойство PostBackUrl любого элемента управления кнопки (LinkButton, Button, ImageButton и т. Д.). Это свойство позволяет вам отправлять сообщения на любую понравившуюся вам страницу. Просто установите для вашего PostBackUrl версию https на вашей странице, и все готово (также убедитесь, что не существует активных перенаправлений URL-адресов, которые вызывают http на вашей странице).

// ensure we send credentials over a secure connection
if (!HttpContext.Current.Request.IsSecureConnection)
{
     string postbackUrl = HttpContext.Current.Request.Url.AbsoluteUri.Replace("http", "https");
     LinkButton_Login.PostBackUrl = postbackUrl;
}

В вашем конкретном случае вы должны установить одну из ваших кнопок для отправки обратно в версию https, а другую в версию http (если вы не укажете PostBackUrl, по умолчанию вы отправляете обратно на саму страницу как есть. ).

2 голосов
/ 30 апреля 2009

Вы можете выполнить ручную публикацию кода, используя объект HttpWebRequest для события входа в систему, а затем записать возвращенный ответ обратно в поток пользователя.

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(webRequest.URL);
request.UserAgent = UserAgent;
request.ContentType = ContentType;
request.Method = "POST";

// Write your bytes of the login section here
 Stream oStream = request.GetRequestStream();
 oStream.Write(webRequest.BytesToWrite, 0, webRequest.BytesToWrite.Length);
 oStream.Close();

 // Send the request and get a response
 HttpWebResponse resp = (HttpWebResponse)request.GetResponse();

 // Read the response
 StreamReader sr = new StreamReader(resp.GetResponseStream());

 // return the response to the screen
 string returnedValue = sr.ReadToEnd();

  sr.Close();
  resp.Close();

  Response.Write(returnedValue);
2 голосов
/ 06 марта 2009

Вы можете иметь две формы на странице aspx. Вы просто не можете их вложить.

На странице, которую я создал, у меня есть одна форма, которая отправляет обратно на страницу, и одна, которая отправляет обратно в Google Checkout.

Если вам нужно смешать содержимое страницы, поместите форму https внизу страницы (после основного тега формы) и заполните ее скрытыми полями. Когда пользователь нажимает кнопку, используйте Javascript для назначения значений скрытым полям, а затем отправьте форму https.

0 голосов
/ 30 апреля 2009

В ASP.Net 3.5 (возможно, SP1 - забудьте, находился ли он в базовой библиотеке или в SP), теперь вы можете установить атрибут «action». Но это сделало бы его публикацией в HTTPS для обеих «форм».

Если вы хотите, чтобы обе формы находились на одной странице и определяли, в какую публикацию отправлять «во время выполнения», вам придется делать это с кодом на стороне клиента. Имейте клиентские обработчики на всех объектах, которые запускают постбэк или подключают к функции _dopostback (или как там это называется - лениво искать), и пусть она проверяет, какая кнопка была нажата. Если страница небезопасна, то сначала очистите все данные в полях входа в систему. Затем вручную запустите обратную передачу на нужную страницу.

0 голосов
/ 10 марта 2009

Являются ли страницы HTTP и HTTPS на одном сервере / части одного и того же приложения?

Если это так, вы можете использовать метод Server.Transfer (), чтобы сохранить форму в неизменном виде, но также иметь HTTPS.

0 голосов
/ 08 марта 2009

Не могли бы вы просто сделать Response.Redirect (" https: //.../Login.aspx"); в событии нажатия кнопки входа в систему.

0 голосов
/ 06 марта 2009

Я предполагаю из вашего контекста, что вы делаете одно или другое, а не оба одновременно.

Посмотрите на PostbackURL объектов кнопки.
кнопка входа может отправить обратно на "https://secure.login.com"

Другая кнопка может просто вернуться на саму страницу.

Проблема в том, что вы все равно будете отправлять обратно поля входа на небезопасную страницу, что означает, что они не зашифрованы и могут быть перехвачены.

Быстрый и грязный обходной путь состоит в том, чтобы javascript очистил поля входа перед публикацией, если нажата кнопка «Получить цитату».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...