我知道有很多問題/答案,關於這個的博客,而不是談論Telerik的常見問題解答。不過我找不到這個診斷並清晰純淨的方式解決:如何與HttpClient一起使用Fiddler?
語境:
我有一個Web API應用程序,我有一個(單元測試)客戶端,它使用的HttpClient發送請求到API。 Web API應用程序在http://localhost:8631/收聽 有時我使用Fiddler來查看正在發生的事情。
問題:
我的HttpClient和Web API之間的流量不會被捕獲提琴手。發射後提琴手流量仍然可以,但未在Fiddler中顯示。
診斷至今:
- 重要提示:使用任何瀏覽器發送請求到http://localhost:8631/工作,我的意思是:交通由小提琴手
- 捕獲配置HttpClient的明確使用提琴手作爲代理並沒有幫助。
- 更改HttpClient的網址從http://localhost:8631/到http://localhost.fiddler:8631/幫助,無論代理的已配置或沒有。
結論: 至少我的情況:這是不是HttpClient的明確配置爲使用招作爲代理與否。這是關於HttpClient和/或Fiddler的本地主機行爲。再次
問題:
有人可能會問:問題解決了,那麼什麼是問題?嗯......
Q1:這仍然是一個棘手問題,因爲URL編碼或配置的地方(我的意思是http://localhost:8631/或http://localhost.fiddler:8631所以每次開始和提琴手停止它必須更多信息:檢查源代碼到源代碼管理,以及由隊友檢查另一臺機器可能會導致問題。因此:是否有任何較少的痛苦解決方法?
硬編碼我的機器名稱可以工作)在團隊工作和使用源代碼控制時導致非常相同的痛苦和問題
Q2:爲什麼這種不一致的行爲:Pure http://localhost:8631/適用於任何瀏覽器,但不適用於HttpClient。
我想回答Q2可以讓我們更接近一個更實用的解決方法。
代碼圖表
// Using the following url w o r k s regardless of any proxy setting
// ...but it is a pain to hardcode or configure this and change depending on Fiddler is running or not
//private const string ApiUrl = "http://localhost.fiddler:8631/";
// This is not working regardless any proxy setting. Trafic bypasses Fiddler
private const string ApiUrl = "http://localhost:8631/";
protected HttpClient GetClient()
{
var httpClientHandler = new HttpClientHandler
{
// Does not work
//Proxy = new WebProxy("http://localhost:8888", false),
// Does not work
Proxy = WebRequest.DefaultWebProxy,
UseProxy = true
};
var client = new HttpClient(httpClientHandler)
{
BaseAddress = new Uri(ApiUrl)
};
// ...
你*不需要做任何事情與HttpClient一起使用Fiddler。 Fiddler設置/重置默認OS代理,以便*不需要修改任何應用程序以使用它。只有當您...在代理設置之前撥動代理設置或終止Fiddler纔有機會重置OS代理,例如關閉 –
爲了獲得特定問題的幫助,您需要發佈實際代碼,包括對app.config中system.net代理設置的任何修改 –
您是否嘗試過.NET的提琴手文檔? http://docs.telerik.com/fiddler/Configure-Fiddler/Tasks/ConfigureDotNETApp –