代码之家  ›  专栏  ›  技术社区  ›  Judah Gabriel Himango

Silverlight WebClient Accept标头在Firefox 3中被覆盖

  •  3
  • Judah Gabriel Himango  · 技术社区  · 15 年前

    我有一个Silverlight应用程序,它使用WebClient类与restweb服务通信。它在ie8和chrome5中运行良好,但在firefox3中web服务调用失败。

    我已经缩小了问题的范围:firefox3正在更改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头?

    1 回复  |  直到 15 年前
        1
  •  1
  •   Judah Gabriel Himango    14 年前

    所有浏览器都覆盖了Accept头。IE和Chrome用“*/*”(星形斜杠)的值覆盖Accept头。Firefox用一些奇怪的值来覆盖它,这些值指定XML等等。

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