ASP.NET/IIS将302响应重写为200

时间:2019-01-28 16:11:44

标签: javascript asp.net .net-4.0 ext.net

我想使用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. 单击页面上的按钮,该按钮会将form发布到服务器上
  2. 服务器端代码运行,其中包括对Response.Redirect的调用。
  3. 响应于POST,浏览器收到200个包含{script:"window.location=\"http://www.example.org/?key1=value1&key2=value2\";"}
  4. 浏览器对URL进行GET-如果是IE,则对响应中显示的URL;对于Chrome,则是对HTML编码的版本。

Edit2:

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

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

1 个答案:

答案 0 :(得分:1)

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