我想使用 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
在两种浏览器中按预期运行?
编辑:
为清楚起见,事件顺序如下:
- 单击页面上的按钮,将
表单
POST 到服务器 - 服务器端代码运行,其中包括对
Response.Redirect
的调用。 - 为了响应 POST,浏览器会收到包含
{script:"window.location=\"http://www.example.org/?key1=value1&key2=value2\";"}< 的 200/
- 浏览器对 URL 进行 GET 操作 - 如果是 IE,则为响应中显示的 URL;如果是 Chrome,则为 HTML 编码的版本。
编辑2:
我已经更新了我的代码以显式执行 302 重定向,而不是使用 Response.Redirect
但它的行为方式仍然相同! 302 被 JS 重定向所取代!有谁知道任何地方(代码或 IIS 中)的任何设置可能会导致此行为?我的新重定向代码是:
private void ExplicitRedirect(string url)
{
Response.StatusCode = 302;
Response.RedirectLocation = url;
Response.End();
}
最佳答案
该项目使用 Ext.Net,它显然改变了 Response.Redirect
的行为。使用 Ext.Net 自己的 Redirect
方法仍然使用 JS 而不是 302,但由于某种原因,该方法按预期工作。
关于javascript - ASP.NET/IIS 将 302 响应重写为 200,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54406068/