首页 > 解决方案 > ASP.NET/IIS 将 302 响应重写为 200

问题描述

我想用来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在两个浏览器中按预期运行?

编辑:

为了清楚起见,事件的顺序如下:

  1. 单击页面上的一个按钮,该按钮将一个 POSTform到服务器
  2. 服务器端代码运行,其中包括对Response.Redirect.
  3. 作为对 POST 的响应,浏览器收到一个 200 包含{script:"window.location=\"http://www.example.org/?key1=value1&key2=value2\";"}
  4. 浏览器对 URL 进行 GET - 在 IE 的情况下是响应中显示的那个,或者在 Chrome 的情况下是 HTML 编码的版本。

编辑2:

我已经更新了我的代码以明确执行 302 重定向而不是使用,Response.Redirect但它的行为仍然相同!302 被替换为沿线某处的 JS 重定向!有谁知道任何可能导致这种行为的设置(在代码中或在 IIS 中)?我的新重定向代码是:

private void ExplicitRedirect(string url)
{
    Response.StatusCode = 302;
    Response.RedirectLocation = url;
    Response.End();
}

标签: javascriptasp.net.net-4.0ext.net

解决方案


该项目使用 Ext.Net 显然改变了Response.Redirect. 使用 Ext.Net 自己的Redirect方法仍然使用 JS 而不是 302,但由于某种原因,此方法按预期工作。


推荐阅读