Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Разработка под ASP.NET > Post Request and Redirect


Автор: Boing747 4.1.2008, 17:32
Приветствую.

Есть приложение, которое сначала проверяет, залогинен ли юзер, а затем редиректит его на запрошеную страницу. Если он не залогинен, то сначала пересылаем его на страницу для авторизации, а затем переходим на ту страницу, которую он хотел. Запрос страницы мы сохраняем. Он может быть как Get так и Post. С Get-ом понятно - простой Redirect. Что делать с постом?

Запрашиваемая страница не обязательно принадлежит этому сайту. Т е возможен случай, когда это Web - служба , к примеру, которая не поддерживает GET запрос, т е не удастся переделать запрос в GET и отправить.

Можно конечно побалываться с HttpWebRequest, и так отправить запрос, получить страницу, а потом ее как то отобразить, но мне кажется, что это не правильно. Есть идеи?

Спасибо.

Автор: Mymik 4.1.2008, 21:20
Цитата(Boing747 @  4.1.2008,  17:32 Найти цитируемый пост)
С Get-ом понятно - простой Redirect. Что делать с постом?

Немного не понимаю вопроса :( а что тебе мешает обращаться в POST точно так же как и с GET ???

Автор: tol05 4.1.2008, 22:07
Цитата(Boing747 @  4.1.2008,  16:32 Найти цитируемый пост)
Запрашиваемая страница не обязательно принадлежит этому сайту

это как? Ты на макрософт хочешь попасть, а твои запросы винград перехватывает и говорит, что ты не залогинен?

Давай код, может тогда хоть что-то поймем.

Автор: Boing747 5.1.2008, 14:24
Цитата

Запрашиваемая страница не обязательно принадлежит этому сайту


это как? Ты на макрософт хочешь попасть, а твои запросы винград перехватывает и говорит, что ты не залогинен?

Давай код, может тогда хоть что-то поймем.


Хороший пример с Майкрософтом. Кода пока нет, ну т е  почти нет, он по большей части еще в голове.  smile 
Попытаюсь так объяснить, на примере Майкрософта:
К примеру есть ссылка http://MySystem/getPage.aspx?_page=page1
Мы идем на http://MySystem/getPage.aspx и проверяем, залогинился ли ты на MySystem, если да, то лезим в базу данных и смотрим, что странице "page1" соответствует "http://www.microsoft.com" и загружаем тебе ее, иначе идем на строницу с логином. Т е, мы заходим на сайт Майкрасофта через MySystem.

Автор: tol05 5.1.2008, 17:15
ну так и делай на сайт MySystem обычную аутентификацию, а в getPage.aspx (на нее попадут только аутентифицированные пользователи) смотришь HttpRequest.QueryString для GET или HttpRequest.Form для POST.
Узнаешь целевую страницу и делаешь на нее Response.Redirect (или Server.Transfer) - как лучше, сам смотри.

Для надежности на втором сайте (на который редирект делаешь) можно посмотреть в Request.Cookie есть ли куки, добавленные первым сайтом (тем, который проводил аутентификацию). Только куки должны быть устаревающие.

Автор: Boing747 5.1.2008, 17:52
Цитата(tol05 @ 5.1.2008,  17:15)
ну так и делай на сайт MySystem обычную аутентификацию, а в getPage.aspx (на нее попадут только аутентифицированные пользователи) смотришь HttpRequest.QueryString для GET или HttpRequest.Form для POST.
Узнаешь целевую страницу и делаешь на нее Response.Redirect (или Server.Transfer) - как лучше, сам смотри.

Для надежности на втором сайте (на который редирект делаешь) можно посмотреть в Request.Cookie есть ли куки, добавленные первым сайтом (тем, который проводил аутентификацию). Только куки должны быть устаревающие.

 smile Я так и делаю. Вопрос в том, что Redirect  будет через Get, а я видел страницы, которые принимают только POST, и исправить их нету возможности. Вот я думал, как бы Redirect с POSTом объеденить. 

Автор: tol05 5.1.2008, 23:16
Используй куки.

Пример:
На странице Default.aspx имеется одна кнопка, в обработчике клика которой код
Код

protected void Button1_Click(object sender, EventArgs e)
{
        //Аутентификацию юзер прошел , будем считать. И просил он 
    Response.Cookies.Add(new HttpCookie("authenticationCookie", "Yezzz!"));
    Response.Redirect("~/Default2.aspx");
}

на странице Default2.aspx проверяется наличие кука от приложения, проводившего аутентификацию
Код

protected void Page_Load(object sender, EventArgs e)
{
    bool authenticated = false;
    foreach(string cookieName in Request.Cookies.Keys)
    {
        if(cookieName == "authenticationCookie" && Request.Cookies[cookieName].Value == "Yezzz!")
        authenticated = true;
    }
    if(!authenticated)
    {
                //не аутентифицирован? ТОгда на страницу аутентификации
        Response.Redirect("~/Default.aspx");
    }
}

ну а что ты имеешь в виду, когда говоришь о Redirect-е с Get-ом мне непонятно... Поставь в Default2.aspx брейкпоинт где-нибудь и посмотри Request дебаггером... Я увидел, что
Цитата

  HttpMethod    "POST"    string

Автор: Boing747 8.1.2008, 21:30
Цитата

 Вобщем спасибо, tol05, за внимание. Наверное у меня просто не совсем получилось задать вопрос. 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)