2010-09-27 3 views
4

Я пытаюсь получить предыдущий URL-адрес страницы после того, как напишу ответ, и я просмотрел веб-страницы, и люди используют HTTP_REFERER, но это не работает с Response.Redirect так или иначе, чтобы получить URL-адрес предыдущей страницы?Получите URL-адрес предыдущей страницы после Response.Redirect

У меня есть этот код на несколько страниц, и мне нужно знать, какие страницы он приходит от того, когда он попадет в servererror/default.aspx странице

Response.Redirect("servererror/default.aspx?404") 

И на моей странице servererror/default.aspx я просто пытаюсь захватить предыдущая страница URL и поместить его в сессии Session("ErrorPage")

Благодаря

Джейми

UPDATE

Теперь я получил его на работу, как этот

Response.Redirect("server-error.aspx?404&" & Request.Url.ToString()) 

, который проходит в URL страницы с ошибкой на следующей странице, а затем я хватаю, что из строки запроса

Благодаря

Джейми

+0

ошибки сервера обработки на странице aspx - очень, очень плохая практика, вместо этого используйте htm (l). –

ответ

6

Вы можете передать URL-адрес предыдущей страницы URL-адрес страницы ошибки. что-то вроде

Response.Redirect("servererror/default.aspx?404&url=/folder/page.aspx")

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

+0

Это лучшее решение, это подход большинства сайтов. – jimplode

+0

, так как HTTP_REFERER может быть заблокирован в браузере (конфиденциальность) – eglasius

+0

Я адаптировал ваше предложение для этого Response.Redirect («server-error.aspx? 404 &» & Request.Url.ToString()), и оно работает благодаря –

2

Вы можете попробовать Server.Transfer вместо того, чтобы увидеть, если он заполнит значение HTTP_REFERER.

+0

Это не заполняет поле referrer, но я считаю, что он заполнит ClientFilePath, поскольку это то, что они изначально запросили, а затем передали их. – jimplode

2

Имейте в виду, что делает Response.Redirect: он выдает 302 «найденным» клиенту. Этот код ответа предназначен для указания того, что контент, который вы ищете, находится не в запрошенном вами месте, а вместо этого находится в другом месте.

Учитывая эту информацию; страница, которая выдает Response.Redirect, на самом деле не является «реферером». Вот почему страница, которая ссылалась на эту страницу, по-прежнему сообщается как ссылка.

Как было отмечено выше Рауты, вы должны включить в URL строку перенаправлении на любую дополнительную информацию, вам нужно, такие как URL текущей страницы

1

Я знаю его старый пост, чтобы ответить Даже парень, который выложили этот вопрос нашел некоторое обходное решение для решения его вопроса ............. но вчера вечером вчера я столкнулся с такой же трудностью, поэтому я пришел с обходным решением, которое работает над моим делом ...

У меня есть 2 страницы Page1.aspx и Page2.aspx У меня есть Button1 и Button2 на странице1.aspx теперь, что сценарий, когда я перенаправляюсь на страницу. ASP.NET, я хочу получить доступ к элементам управления Page1.aspx, который называется предыдущей страницей ..... Так что я использую PostBackUR L кнопки, но в этом случае я не получал событие Click на CodeBehind ......... так как я должен решить эту проблему ............. Что я сделал что я устанавливаю Button2.PostBackURL = «Page2.aspx», и когда срабатывает событие Button1 Click, я регистрирую скрипт запуска, который вызывает событие Button2.click, поэтому теперь я получаю элементы управления предыдущей страницы ......... ,

Вот код ..... если кто-то ищет ту же функциональность ............ они будут помогать в каком-то смысле ........

Aspx Код

<asp:Button ID="btnSave" runat="server" Style="font-weight: 700" Text="Save" 
    onclick="btnSave_Click" /> 

Code-Behind

protected void btnSave_Click(object sender, EventArgs e){ 
    try 
    { 
     StringBuilder objStringBuilder = new StringBuilder(); 
     objStringBuilder.AppendLine("<script type='text/javascript' language='javascript'>"); 
     objStringBuilder.AppendLine("document.getElementById('" + btnHidden.ClientID + "').click();"); 
     objStringBuilder.AppendLine("</script>"); 

     ClientScript.RegisterStartupScript(Page.GetType(),"Key1", objStringBuilder.ToString()); 
    } 
    catch (Exception ex) 
    { 
     throw ex; 
    }} 

С уважением,