2014-10-31 2 views
0

У меня возникла проблема с извлечением маркера доступа из URL-адреса перенаправления. Когда я пытаюсь выполнить свою закодированную процедуру на моем мозилле, я перенаправляюсь к моему локальному хосту с помощью токена доступа, но как мне создать экземпляр этого с помощью моего веб-браузера в C#? Мой текущий код выглядит следующим образом:Google REST API Windows Forms login

public partial class Form1 : Form 
{ 
    public string client_id = "CLIENT_ID"; 
    public string client_secret= "CLIENT_SECRET"; 
    public string redirect_uri = "http://localhost:5050"; 
    public Form1() 
    { 
     InitializeComponent(); 

     webBrowser.AllowNavigation = true; 
     webBrowser.DocumentCompleted += webBrowser_DocumentCompleted; 
     webBrowser.Navigate(String.Format("https://accounts.google.com/o/oauth2/auth?response_type=code&scope=email+profile&redirect_uri={0}&client_id={1}&hl=de&from_login=1&as=d832bdaf61552d&pli=1&authuser=0" 
      ,redirect_uri, client_id)); 

    } 

    void webBrowser_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) 
    { 
     WebBrowser wb = sender as WebBrowser; 
     //MessageBox.Show(wb.Url.ToString()); 
     if (wb.Url.ToString().StartsWith("http://localhost")) 
     { 

      String[] s = wb.Url.ToString().Split('='); 
      string authCode = s[s.Length - 1]; 

      MessageBox.Show("auth Code: " + authCode); 

      //WebClient wc = new WebClient(); 

      //var data = new NameValueCollection(); 
      //data["code"] = authCode; 
      //data["client_id"] = client_id; 
      //data["client_secret"] = client_secret; 
      //data["redirect_uri"] = "http://localhost:5050"; 
      //data["grant_type"] = "authorization_code"; 

      //var response = wc.UploadValues("accounts.google.com/o/oauth2/token", "POST", data); 

      //foreach (byte a in response) 
      //{ 
      // MessageBox.Show(a.ToString()); 
      //} 
     } 
    } 

Если вы знаете, как сделать это с помощью API GoogleDrive пожалуйста, поделитесь со мной.

ответ

1

Пожалуйста, используйте UIWebBrowser вместо WebBrowser, и ваш код должен понравиться.

public Form1() 
{ 
    InitializeComponent(); 

    UIWebBrowser.AllowNavigation = true; 
    UIWebBrowser.DocumentCompleted += webBrowser_DocumentCompleted; 
    UIWebBrowser.Navigate(String.Format("https://accounts.google.com/o/oauth2/auth?response_type=code&scope=email+profile&redirect_uri={0}&client_id={1}&hl=de&from_login=1&as=d832bdaf61552d&pli=1&authuser=0" 
     ,redirect_uri, client_id)); 

} 

void webBrowser_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) 
{ 
    if (e.Url.AbsoluteUri.StartsWith("http://localhost")) 
    { 
      // Redirect so we end up with a blank web browser control 
      UIWebBrowser.Navigate("about:blank"); 

      code = e.Url.Query; 


    } 
} 
+0

В чем разница между WebBrowser и пользовательским интерфейсом WebBRows – carlilord

+0

* UIWebBrowser. И какую сборку я должен добавить – carlilord

+0

, какую структуру asp.net вы используете? –