前言: 該博客產生的背景是客戶那邊有部署網站的方法是iis authentication身份驗證,而系統中使用Webclient來調用別的系統的方法。在此情況下,原本可以使用的功能,都不能調用方法了,返回結果是401。在經過艱難地查找資料之後,也沒有找到很好的方法來解決。找到的幾個方法也不能很好的解 ...
前言:
該博客產生的背景是客戶那邊有部署網站的方法是iis authentication身份驗證,而系統中使用Webclient來調用別的系統的方法。在此情況下,原本可以使用的功能,都不能調用方法了,返回結果是401。在經過艱難地查找資料之後,也沒有找到很好的方法來解決。找到的幾個方法也不能很好的解決我的問題(實際這些方法都是有用的,但是還是不能完全解決我的問題,導致我在開始解決這個問題的時候走了好多的彎路),下麵就先把這些方法說一下,思路都是要通過驗證:
1,設置client.UseDefaultCredentials = true;
一般該而言都是有效的,最後我也使用了這個方法,但是我的情況還需要其它的修改。這個稍後再說。
還可以使用client.Credentials = CredentialCache.DefaultCredentials;據說2個方法是等效的。
2,設置client.Credentials = new System.Net.NetworkCredential("****", "***");分別填入該部署伺服器的用戶名和密碼,這個方法是直接可行的,但對我而言不太現實,首先客戶願不願意把帳號和密碼寫到配置你不說,而且他們也不是太懂代碼,寫了之後換密碼,換人維護項目都不是太好的選擇方案。因此當時暫時被我放棄,想著如果找不到好的解決方案的話,最後沒有辦法就使用這個方法。
3,此外還找了一些其它的方法,但幾乎沒有什麼用處,就不在這裡一一列舉了。
在經過艱難,痛苦和絕望之後,我現在是和iss authentication設置有關,由於沒有客戶那邊的環境,我這邊的環境也是自己搭建的,找了好多最後終於找到一篇文章,按照上面說法需要把
NTLM放在第一位,具體的原理也不是太清楚。當時環境是自己搭建的,所以也不是很懂,但是在把NTLM放在第一位後,加上第一種的驗證方式,終於可以用ip的方式來調用方法。
把代碼發給客戶以後,客戶的確沒有再提這個問題了,但是功能變數名稱方式不知道在客戶那能不能使用。自己本地因為使用hosts來模擬的是不行的,想用花生殼來模擬下,但是要註冊就暫時沒搞了。