HttpWebRequest仅在Internet Explorer中返回404s的404s

Dan*_*ers 8 .net c# silverlight internet-explorer httpwebrequest

我有一个Silverlight(v3)应用程序,它使用WebRequest向与Silverlight应用程序在同一网站上的网页发出HTTP POST请求.此HTTP请求返回302(重定向)到同一网站上的另一个页面,HttpWebRequest自动应该遵循(根据文档).

发出请求的代码没有什么特别之处(它使用浏览器的HTTP堆栈,它没有配置为使用备用的内置Silverlight HTTP堆栈):

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(String.Format("{0}?name={1}&size={2}", _UploadUrl, Uri.EscapeUriString(Name), TotalBytes));
request.Method = "POST";
Run Code Online (Sandbox Code Playgroud)

这一切在Firefox和Chrome中运行良好; Silverlight发出POST HTTP请求,接收302响应并自动执行指定重定向URL的GET HTTP请求并将其返回给我(我知道这是因为我使用Fiddler来监视正在进行的HTTP请求).但是,在Internet Explorer(v8)中,Silverlight执行POST HTTP请求,然后抛出带有404错误代码的WebException!

使用Fiddler,我可以看到Silverlight/Internet Explorer成功返回了请求的302状态代码,我假设我在Silverlight中获得的404状态代码(以及关联的WebException)是因为据我所知HTTP请求由于受到限制,通过浏览器堆栈完成只能返回200或404.真正的问题是为什么Internet Explorer不像其他浏览器那样遵循重定向

在此先感谢您的帮助!

编辑:我不想使用Silverlight客户端HTTP堆栈,因为根据我的知识,它发出的请求不包括作为浏览器会话一部分的cookie,严格地说包括我需要附加到ASP.NET的身份验证cookie由Silverlight控件发出的HTTP请求.

编辑2:我发现当您执行POST请求时,Internet Explorer仅显示此行为.GET请求成功重定向.考虑到现在有多少网站以Post-Redirect-Get风格执行操作,这似乎是非常糟糕的行为.

我已经创建了一个简单的演示VS2008解决方案,如果它有帮助,它会表现出这种奇怪的行为.它包含一个基本的ASP.NET MVC 1项目和一个Silverlight 3项目.导航到网站上的SilverlightControlTestPage.html页面以查看实际问题.

kyn*_*igs 0

我相信这是 Internet Explorer 7 中的一项功能更改,他们将预期的 200 响应更改为 302,告诉 IE 进行重定向。据我所知,这个问题没有一个顺利的解决方案。不久前也有人提出过类似的问题。

Internet Explorer 7 及更高版本在 CONNECT 请求方面的行为发生变化