none
Узнать страницу редиректа до его совершения RRS feed

  • Вопрос

  • Здравствуйте, нужно узнать страницу редиректа до его совершения.

    Делаю ограничение доступа к определённым страницам. Страниц 10 штук и в каждой своя логика - где та через постбек при передаче параметра происходит редирект, где то напрямую. А я хочу, чтобы страница не перегружалась(не перерисовывалась), если есть запрет. Запрет осуществляется по имени страницы, на которую перехожу относительно пользователя из БД. Хочется не плодить код в каждой странице а сделать одной функцией.Это как то можно реализовать?
    18 апреля 2012 г. 9:50

Ответы

  • То есть получается нужно сделать проверку до вызова метода Response.Redirect() - допустить или нет пользователя к странице?

    Да именно так, редирект делаете только тогда, когда не хотите отдать запрашиваемую страницу. Т.е. перенаправляете на страницу регистрации или ещё куда нибудь.

    "Я просто не до конца понимаю - при первом обращении к серверу пользователем у него же будет в url текущая страница с которой он совершает запрос к серверу, ведь так?" - используйте свойство.

    Request.UrlReferrer


    • Изменено YatajgaEditor 18 апреля 2012 г. 11:19
    • Помечено в качестве ответа ansi_str 18 апреля 2012 г. 13:37
    18 апреля 2012 г. 11:17
    Модератор

Все ответы

  • Не совсем понятен вопрос, можете уточнить. Редирект происходит на ту страницу которую запросил пользователь, получить URL можно так

    Request.Url

    , или на ту, на которую вы перенаправляете методом

    Response.Redirect("Url")

    18 апреля 2012 г. 10:08
    Модератор
  • На которую переправляется методом
    Response.Redirect("NewPage.aspx");
    То есть мне нужно как то сравнить страницу из БД - на которую нет доступа
    И страницу на которую будет совершён редирект.

    Проблема в том, что если использовать как Вы предложили - то я получу текущую страницу
    • Изменено ansi_str 18 апреля 2012 г. 10:21
    18 апреля 2012 г. 10:19
  • Можете подробней обьяснить, то что вы хотите ? А то пока я не пойму, что конкретно Вы хотите.

    18 апреля 2012 г. 10:35
    Модератор
  • Есть список пользователй сайта. 
    В базе есть таблица Id пользователя - страница доступа(например Default.aspx) - колонка(разрешить \ не разрешить доступ)

     Задача такая - нужно заблокировать доступ пользователя к странице, взятой из базы.
     То есть он делает редирект, а его не пускают и он остаётся на текущей странице.
     Проблема в том, что если я делаю редирект - перехожу на запретную страницу, то на сервере я снова делаю редирект обратно
     И состояние страницы от которой я хотел перейти на страницу под запретом не сохраняется. То есть если подсвечивается одна кнопка, то она уже не подсвечивается. Я хочу как то обойти эту ситуацию и восстановить состояние либо не делать редирект
    18 апреля 2012 г. 10:41
  • "То есть он делает редирект, а его не пускают и он остаётся на текущей странице." - пользователь не может делать редирект, редирект делает Ваше серверное приложение (код который написали Вы). Когда клиент делает запрос, серверный код решает отдать ему ту страницу которую он запросил, или перенаправить его на другую. Когда вызывается метод Response.Redirect(), то серверный код отпраляет запрос клиенту ( просит ), чтобы тот запросил другую страницу и браузер повторно запрашивает адрес на который Вы перенаправили. Теперь Вы можете написать логику доступа для той странице, к которой доступ запрещён, на которую происходит редирект. Т.е. если пользователь запросил страницу, то Вы проверяете есть ли у него доступ к этой странице и сответственно запрещаете или разрешаете. А вообще я предлагаю не изобретать велосипед, а использовать стандартный провайдер Membership API.

    18 апреля 2012 г. 10:57
    Модератор
  • "То есть он делает редирект, а его не пускают и он остаётся на текущей странице." - если не хотите его пускать на ту страницу которую он запросил, то Вы можете его перенаправить снова на ту с которой он пришёл. Только это не очень хорошая идея, так как пользователь не поймёт почему так происходит, нужно как то ему объяснить, что происходит. Предложить регистрацию, или написать в ответе что доступ к этой странице по такой то причине запрещён.
    18 апреля 2012 г. 11:05
    Модератор
  • То есть получается нужно сделать проверку до вызова метода Response.Redirect() - допустить или нет пользователя к странице?

    Я просто не до конца понимаю - при первом обращении к серверу пользователем у него же будет в url текущая страница с которой он совершает запрос к серверу, ведь так?
    18 апреля 2012 г. 11:06
  • То есть получается нужно сделать проверку до вызова метода Response.Redirect() - допустить или нет пользователя к странице?

    Да именно так, редирект делаете только тогда, когда не хотите отдать запрашиваемую страницу. Т.е. перенаправляете на страницу регистрации или ещё куда нибудь.

    "Я просто не до конца понимаю - при первом обращении к серверу пользователем у него же будет в url текущая страница с которой он совершает запрос к серверу, ведь так?" - используйте свойство.

    Request.UrlReferrer


    • Изменено YatajgaEditor 18 апреля 2012 г. 11:19
    • Помечено в качестве ответа ansi_str 18 апреля 2012 г. 13:37
    18 апреля 2012 г. 11:17
    Модератор
  • Спасибо, всё заработало

    А можно как то ещё сохранить состояние той самой страницы, от которой я пытаюсь перейти на запрещённую?
    • Изменено ansi_str 18 апреля 2012 г. 11:48
    18 апреля 2012 г. 11:41
  • Я же дал ссылку для использования стандартных средств безопасности ASP.NET, и ещё очень подробно про это написано в книге М. Мак-Дональда "Microsoft ASP.NET 4 с примерами на С# 2010 ", главы 19-20, в сети она есть.

    "Как можно унифицировать код - чтобы как то прописать в одно месте - что:" - создаёте директорию, переносите туда те файлы доступ к которым запрещён, обычным пользователям ну или всем, создаёте там конфигурационный файл со следующим содержимым.

    <configuration> 
     <system.web> 
      <authorization> 
       <deny users="?" /> 
      </authorization>
     </system.web> 
    </configuration> 
    Потом нужно будет использовать аутенцификацую на основе форм, пример большой, полность я его тут не могу описать, ссылки я Вам дал.
    18 апреля 2012 г. 11:59
    Модератор
  • Спасибо
    18 апреля 2012 г. 13:37
  • "А можно как то ещё сохранить состояние той самой страницы, от которой я пытаюсь перейти на запрещённую?" - смотря что именно, если какие-то данные, то используйте коллекцию Session (свойство Session в классе страницы), только смотрите не переусердсвуйте, так как это ценный ресурс.
    18 апреля 2012 г. 13:48
    Модератор
  • Еще на сколько я знаю, можно попробовать воспользоваться глобальным событием HttpApplication.PreRequestHandlerExecute, которое вызывется перед каждым запросом, и в котором можно выполнить проверку прав и выполнить перенаправление на 403-ю страницу с сообщением о нехватке прав.


    Для связи [mail]

    18 апреля 2012 г. 15:23
    Модератор