2016-03-16 3 views
1

Хотя следующие статьи Azure Active Directory, я боролся со следующим кодом:Windows Forms Authentication с помощью Azure Active Directory

string authority = "https://login.windows.net/winsmartstest.onmicrosoft.com"; 
     string resourceURI = "https://winsmartstest.onmicrosoft.com/MyWebAPI"; 
     string clientID = "9329c7a4-2d61-467b-94b8-c5ce67cca6c3"; 
     Uri returnURI = new Uri("http://doesntreallymatter"); 

     AuthenticationContext authContext = 
      new AuthenticationContext(authority); 
     AuthenticationResult authResult = 
      authContext.AcquireToken(resourceURI, clientID, returnURI); 

     string authHeader = authResult.CreateAuthorizationHeader(); 

     // don't do this in prod 
     System.Net.ServicePointManager.ServerCertificateValidationCallback = 
      ((s, c, c2, se) => true); 

     HttpClient client = new HttpClient(); 
     HttpRequestMessage request = 
      new HttpRequestMessage(HttpMethod.Get, "https://localhost:44300/api/tasks"); 
     request.Headers.TryAddWithoutValidation("Authorization", authHeader); 
     var response = await client.SendAsync(request); 
     string responseString = await response.Content.ReadAsStringAsync(); 
     MessageBox.Show(responseString); 

Я получаю следующее сообщение об ошибке:

Error 1 The 'await' operator can only be used within an async method. Consider marking this method with the 'async' modifier and changing its return type to 'Task'.
c:\users\6025\documents\visual studio 2013\Projects\webapi.test\WindowsFormsApplication1\Form1.cs 43 28 WindowsFormsApplication1

Что я неправильно делаю?

+1

Сообщение об ошибке довольно прямолинейно. Вам нужно изменить свой метод на 'async'. –

+0

Можете ли вы опубликовать код всего вашего метода, включая подпись метода? –

ответ

0

Ваша проблема не имеет отношения к Azure AD. Это то, что вы используете await, не будучи в методе async. Вы можете изменить метод на async или удалить await. Если вы удалите await, вам необходимо вызвать свойство Result задач, которые будут возвращены. Удаление await, вероятно, является самым простым способом заставить ваш код работать, но не лучшим для производительности.

Как var response = client.SendAsync(request).Result;

Здесь больше информации о асинхронном и ждет: https://msdn.microsoft.com/en-us/library/hh191443.aspx

+0

'Удаление ожидания - это, пожалуй, самый простой способ заставить ваш код работать' -> Я не думаю, что это решило бы проблему, поскольку вызываемый метод (' ReadAsStringAsync') является асинхронным. Если вы не дожидаетесь этого метода, вы не можете получить желаемый результат. –

+0

Метод Async вернет задачу. Задача имеет свойство Result, которое содержит требуемый объект. – lgaud

0

извините за беспокойство асинхронного должны были быть добавлен в случае частного асинхронного недействительным button1_Click (отправитель объекта, EventArgs е) { }

Смежные вопросы