2013-11-27 68 views
-1

我在調用外部API的Silverlight業務應用程序中遇到了一個奇怪的問題。我敢肯定,這只是一條線路錯誤或某事。 API有一個使用摘要認證的調用,我自己處理。我的代碼在以前工作,但後來我開始過渡到託管後端API和Azure上的這個前端網站,並且必須發生一些變化。現在,在請求返回到我的代碼處理之前,瀏覽器會彈出一個自己的登錄對話框。如果我取消了該對話框,它將轉到我的代碼併成功進行身份驗證。Silverlight Windows安全對話框

看起來好像瀏覽器正在處理請求,注意到401狀態碼並嘗試自行解析它。但是我建議按照建議爲ClientHttp工廠註冊http://前綴,並且創建的請求類型是ClientHttpWebRequest。就像我說的,這一切都在一週前使用相同的認證代碼和一切工作,所以我相信這只是一些設置。但我不確定那可能是什麼,我還沒有發現任何其他人有這個問題。

奇怪的是,當我將ASP項目發佈到Azure網站時,它看起來都像預期的那樣行事,但登錄甚至不會彈出對話框。當我點擊「登錄」時,它根本不會做任何事情。所以這部分看起來可能是一個未處理的異常正在拋出,然後它沒有告訴我,但我不知道爲什麼這將是Azure,而不是IIS Express的情況。

基本上,我只是不想讓對話出現。我傾向於認爲,造成Azure託管版本的任何問題都會導致無法執行任何操作。

我已經做了一些搜索,發現這個問題,"How can I supress the browser's authentication dialog?"這似乎是同一個問題,但正如我說過幾次,這是上週工作。我確實完全控制了API和這個站點,所以我可以改變一些東西來使它抑制HTTP狀態,並簡單地返回一個包含內容細節的200作爲替代,但是我寧願避免額外的一層複雜性它真的很簡單,就像我想象的那樣。

回答

0

經過一番搗亂之後,似乎處理此錯誤的最好方法就是使用WebRequest.Credentials屬性並填充它,而不是自己形成我的Digest授權標頭。這不完全是我想要的,但它現在會做。我仍然不知道爲什麼這首先停止工作。但如果一切按計劃進行,編程有什麼好玩的?