Response.Rirectirect с заголовками - PullRequest
9 голосов
/ 01 ноября 2010

Я пытаюсь установить заголовки и перенаправить на другую страницу, как это -

Response.Headers.Add("id", "testtest");
Response.Redirect("http://www.somesite.com/somepage.aspx");

И в page_load somepage.aspx я проверяю запрос на заголовки -

if (!string.IsNullOrEmpty(Request["id"]))
{
   // do something with "id"
}

Но Request["id"] всегда равно нулю.Как получить значения заголовка на новой странице?Я не хочу использовать строки запроса.

Спасибо!

Обновление:

Вот еще немного подробностей - у меня есть два веб-приложения ASP.NET v4 (Сайт 1 и Сайт 2), работающие на двух разных машинах,На сайте 1 есть только одна форма aspx, и на ней есть только одна кнопка.При нажатии кнопки я нажимаю на базу данных и получаю нужное мне значение и должен передать его на сайт 2. В Global.asax на сайте 2 я буду читать информацию заголовка, полученную с сайта 1, и использовать значение.

Обновление № 2:

Мне удалось заставить его работать -

 Response.Write(
                    string.Format(
                        @"<form action='{0}' id='test' method='POST'><input type='hidden' name='key' value={1} /></form>
                  <script type='text/javascript'>
                     document.getElementById('test').submit();
                  </script> ",
                        "http://www.somesite.com", "1234"));

На целевом сайте я смог получить значение, используя -

Request["key"]

Ответы [ 4 ]

13 голосов
/ 01 ноября 2010

Заголовки HTTP действительны только для текущего ответа. Когда вы устанавливаете перенаправление, текущий ответ содержит ваш пользовательский заголовок, но когда браузер следует местоположению перенаправления, эти заголовки больше не присутствуют. Кроме того, вы используете Request["id"] на другой странице, поэтому вам нужно отправить значение в виде строки запроса:

Response.Redirect("http://www.somesite.com/somepage.aspx?id=test");
2 голосов
/ 12 мая 2014

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

Так что вы можете просто использоватьодин из тех HTTP-клиентов в .Net Framework, как HttpClient или HttpWebRequest, и отправляет пользовательский запрос с любыми заголовками, которые вы хотите вместо вызова Response.Redirect.

. Однако можно добавить пользовательские заголовки вОтветное сообщение http только в IIS .По-прежнему нет возможности управлять последующими заголовками запросов при выполнении перенаправления.

<configuration>
   <system.webServer>
      <httpProtocol>
         <redirectHeaders>
            <add name="X-Custom-Redirect-Header" value="MyRedirectValue" />
         </redirectHeaders>
      </httpProtocol>
   </system.webServer>
</configuration>
2 голосов
/ 01 ноября 2010

Response.Headers.Add ("id", "testtest"); не имеет ожидаемого эффекта, потому что вы никогда не отправляли ответ клиенту. Если вы используете Response.Redirect, вы просто перенаправляете на URL, а объект Request не объединяется с вашими предыдущими параметрами Response.

Вы можете использовать некоторый механизм AppContext / Session для передачи параметров между этими двумя страницами.

0 голосов
/ 01 ноября 2010

Вы пробовали Server.Transfer("http://www.somesite.com/somepage.aspx");?Это может получить вам необходимые данные.Если нет, вам придется опубликовать данные в форме на исходной странице, если вы не хотите использовать переменную Session.

...