Я хочу использовать Response.Redirect
для перенаправления на новый URL-адрес, содержащий значения строки запроса, например:
Response.Redirect("http://www.example.org/?key1=value1&key2=value2");
Это возвращает браузеру следующий ответ, в результате чего он запрашивает новую страницу:
{script:"window.location=\"http://www.example.org/?key1=value1&key2=value2\";"}
К сожалению, IE11 и Google Chrome обрабатывают это по-разному.IE11 ведет себя так, как и следовало ожидать, однако Chrome HTML-кодирует этот ответ, заставляя браузер перенаправить на http://www.example.org/?key1=value1&key2=value2
, что явно не то, что я хочу.Как я могу использовать Response.Redirect
, чтобы вести себя как ожидалось в обоих браузерах?
Редактировать:
Для ясности последовательность событий выглядит следующим образом:
- Нажмитекнопка на странице, которая отправляет
form
на сервер - запускается код на стороне сервера, который включает в себя вызов
Response.Redirect
. - В ответ на запрос POSTбраузер получает 200, содержащий
{script:"window.location=\"http://www.example.org/?key1=value1&key2=value2\";"}
- Браузер выполняет GET для URL-адреса - либо для того, который показан в ответе в случае IE, либо для HTML-кодированной версии в случае Chrome.
Edit2:
Я обновил свой код, чтобы явно выполнить перенаправление 302 вместо использования Response.Redirect
, однако он все еще ведет себя так же!302 заменяется перенаправлением JS где-нибудь вдоль линии!Кто-нибудь знает какие-либо настройки (в коде или в IIS), которые могут вызвать такое поведение?Мой новый код перенаправления:
private void ExplicitRedirect(string url)
{
Response.StatusCode = 302;
Response.RedirectLocation = url;
Response.End();
}