Как изменить Request.Headers ["Referer"] при выполнении Response.Redirect? - PullRequest
1 голос
/ 11 августа 2010

В веб-приложении (C #, ASP.NET), над которым я сейчас работаю, значение в Request.Headers ["Referer"] может определять такие вещи, как собственный стиль. Я создал пользовательскую страницу с выпадающим меню для проверки этой функциональности. Поэтому, когда выбранный индекс изменяется, выбранное значение должно быть установлено в Request.Headers ["Referer"], а затем будет перенаправлено (Response.Redirect), тогда получающая страница получит значение в Request.Headers ["Referer" ] и отрегулируйте стиль соответственно. Однако я не смог установить значение для Request.Headers ["Referer"]. Возможно ли это вообще?

Веб-сайт 1 устанавливает значение в Request.Headers ["Referer"], например, www.xyz.com и перед выполнением Response.Redirect www.website2.com

Веб-сайт 2 получает значение в Request.Headers ["Referer"], в этом case www.xyz.com и делай то, что нужно делать, то есть укладка и т. д.

Ответы [ 4 ]

3 голосов
/ 24 августа 2011

попробуйте этот код

На Веб-сайте 1 введите этот код в Button Click

        HttpRequest equest =  this.Request;
        NameValueCollection headers = Request.Headers;

        //get a type
        Type t = headers.GetType();         

        t.InvokeMember("MakeReadWrite", BindingFlags.InvokeMethod | 
              BindingFlags.NonPublic | BindingFlags.Instance, null, headers, null);
        t.InvokeMember("InvalidateCachedArrays", BindingFlags.InvokeMethod |
              BindingFlags.NonPublic | BindingFlags.Instance, null, headers, null);

        System.Collections.ArrayList item = new System.Collections.ArrayList();
        item.Add("YOUR_STYLE_NAME");
        t.InvokeMember("BaseAdd", BindingFlags.InvokeMethod | BindingFlags.NonPublic |
              BindingFlags.Instance, null, headers, new object[] { "CUSTOM_STYLE", item });

        t.InvokeMember("MakeReadOnly", BindingFlags.InvokeMethod |
              BindingFlags.NonPublic | BindingFlags.Instance, null, headers, null);

        Server.Transfer("Default.aspx");

и на веб-сайте 2 поместите этот код в стиль

        var bnymuser = Request.Headers["CUSTOM_STYLE"];
2 голосов
/ 11 августа 2010

Вы не можете сделать это. Значение Request.Headers ["Referer"] - это значение, отправляемое браузером при каждом запросе. Браузер сам определяет, какое значение он выберет для этого значения, и у веб-страницы нет средств для отправки ответа, который говорит: «Для следующего запроса используйте это значение для Реферера». И когда вы делаете Request.Redirect, вы отправляете ответ в браузер, сообщая ему сделать еще один запрос.

Итак, чего бы вы ни пытались достичь, этот попытанный метод не будет способом сделать это.

1 голос
/ 11 августа 2010

Вы просто не можете делать это так, как пытаетесь.

Почему ??

Request.Headers в данном случае - это заголовки запроса, полученные от веб-клиента - в большинстве случаев браузера. Если вам нужно изменить или добавить заголовки Http-запроса, сначала вам нужно действовать как HttpClient, как это делает браузер. Как только запрос достигает Http-сервера, в вашем случае ваш сайт 1, вы не можете изменять его значения, потому что это не разрешено делать. По этой причине вы не можете изменить заголовки запроса и затем перенаправить на веб-сайт 2 с измененными заголовками. вам придется отказаться от любой из этих вещей.

Как уже упоминалось, вы можете перенаправить на веб-сайт 2 со значениями в строке запроса.

1 голос
/ 11 августа 2010

используйте строку запроса, чтобы легко выполнить ту же задачу.

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