2014-12-02 128 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