2014-12-02 127 views
1

WebClient的提示,所以我有這樣的代碼,它的工作原理:如何使憑證

var netCred = new NetworkCredential { UserName = "user1", Password = @"pass1" }; 
    WebClient proxy = new WebClient(); 
    proxy.Credentials = netCred; 

    //Method 1 - Newtonsoft.Json 


     string serviceURL = 
      string.Format("https://sourcesite.com/api/external/v1/Snapshot-Accrual?isConfirmed=" 
      + Confirmed.ToString() + "&sinceDate=" + String.Format("{0:yyyy-MM-dd}", SinceDate); 
     data = proxy.DownloadData(serviceURL); 
     jsonString = Encoding.ASCII.GetString(data); 

     ac1 = Newtonsoft.Json.JsonConvert.DeserializeObject<SnapshotAccruals>(jsonString); 

現在,如果我只知道如何提示輸入憑據,而不是硬編碼他們,我會設置。我知道,如果我直接在瀏覽器中粘貼serviceURL,它會向我索要憑證。如果我在代碼中忽略它們(401)未授權。

+0

包含上述示例代碼的客戶端是什麼類型的應用程序?它是一個控制檯應用程序,一個WinForms客戶端或其他東西? – 2014-12-03 10:23:18

+0

它是一個WinForms應用程序。 – Lukasz 2014-12-03 14:31:25

回答

0

看看瀏覽器如何使用Fiddler,你會發現當你把URL粘貼到瀏覽器時,服務器返回一個401,然後提示瀏覽器顯示auth對話框。

如果你知道你總是需要憑證,那麼你應該在你的API調用之前提示。如果你不知道,那麼你將需要先嚐試並檢查401的響應,然後提示

+0

謝謝。有沒有一種標準的方式來要求WinForms中的憑據,還是必須編寫我自己的對話框? – Lukasz 2014-12-03 14:32:42

+1

它可能會更容易創建自己的或您可以嘗試使用此:http://stackoverflow.com/questions/7986862/c-sharp-winform-how-asking-for-credential-with-a-dialog-form – wal 2014-12-03 21:36:35