【问题标题】:Silverlight WebClient Accept header being overwritten in Firefox 3Silverlight WebClient Accept 标头在 Firefox 3 中被覆盖
【发布时间】:2010-08-04 18:35:25
【问题描述】:

我有一个 Silverlight 应用程序,它使用 WebClient 类与 REST Web 服务通信。它在 IE 8 和 Chrome 5 中运行良好,但在 Firefox 3 中 Web 服务调用失败。

我已经缩小了问题范围:Firefox 3 正在更改我的 HTTP 请求的 Accept 标头。这是我的简化代码:

// Use the ClientHttp stack.
WebRequest.RegisterPrefix("http://", WebRequestCreator.ClientHttp);

// Call the web service.
var webClient = new WebClient();
webClient.Headers["Accept"] = "application/json";
webClient.DownloadStringAsync(someUrl);

使用 Fiddler 调查管道上的数据,请求的标头被替换:

GET /1/36497f32-1acd-4f4e-a946-622b3f20dfa5/Content/GetAllTextContentsForUser/0 HTTP/1.1
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Host: localhost:88
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.8) Gecko/20100722 Firefox/3.6.8

请注意第二行“Accept”——它已被替换为 text/html、xml 和其他格式。不是我要找的——我绝对需要 JSON 回来。

有没有办法阻止 Firefox 修改我的 Accept 标头?

【问题讨论】:

标签: silverlight http-headers webclient


【解决方案1】:

事实证明,Accept 标头在所有浏览器中都被覆盖了。 IE 和 Chrome 用“*/*”(星斜杠星号)的值覆盖 Accept 标头。 Firefox 用一些指定 XML 的奇怪值覆盖它。

这个问题的答案是您不能期望保留您的 Accept 标头。即使您使用 ClientHttp,浏览器也会覆盖 Accept 标头。

【讨论】:

  • 你是怎么解决这个问题的?
  • 并没有真正解决它 - 您根本不能期望保留您的接受标头。我们通过在服务器端进行补偿并允​​许不同的接受标头来“解决”它,无论 Silverlight 发送给我们什么。
猜你喜欢
  • 2013-02-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-19
  • 2012-03-05
  • 1970-01-01
  • 2016-10-13
相关资源
最近更新 更多