2010-08-04 35 views
3

我有一個Silverlight應用程序使用WebClient類與REST Web服務對話。它在IE 8和Chrome 5中運行良好,但Firefox 3中的Web服務調用失敗。Silverlight WebClient在Firefox中覆蓋Accept頭3

我已經縮小了問題範圍: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); 

使用招來調查管道中的數據,要求有其標題改爲:

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 

通知二號線,「接受」 - 它被替換文本/ html,xml和其他格式。不是我在找什麼 - 我絕對需要JSON回來。

有沒有辦法阻止Firefox修改我的Accept頭?

+0

OK - 所有瀏覽器都會替換接受字符串。 IE和Chrome將其替換爲「*/*」,而Mozilla引入上面列出的那種時髦的字符串:http://developer.yahoo.com/dotnet/silverlight/2.0/requestheaders.html – 2010-08-04 20:14:44

+0

我希望我的Web服務調用接受JSON,而不是XML,該死。幫幫我! – 2010-08-04 20:15:19

回答

1

原來在所有瀏覽器中覆蓋Accept標頭。 IE和Chrome覆蓋Accept標頭,其值爲「*/*」(星號斜槓)。除了別的之外,Firefox用一些指定XML的奇怪值覆蓋它。

這個問題的答案是你不能指望保留你的Accept頭。即使您使用ClientHttp,瀏覽器也會覆蓋Accept標頭。

+0

你是怎麼解決這個問題的? – kmehta 2010-12-01 16:02:37

+0

沒有真正解決它 - 你只是不能指望保留你的接受標題。我們通過在服務器端進行補償並允​​許不同的接受頭文件來「解決」它,無論Silverlight發送給我們。 – 2010-12-01 21:46:33