У меня есть новое приложение Blazor, которое я пытаюсь собрать вместе и хочу прочитать все мои последние файлы с диска Google.Вызов потока кода авторизации, получение ответа (включая код) и т. Д. - все работает нормально.У меня правильный список подтверждения URI перенаправления, но при вызове flow.ExchangeCodeForTokenAsync
всегда происходит сбой со свойством ответа о том, что вызов находится в состоянии сбоя.
При первоначальном вызове моей страницы входа код перенаправляется, как и ожидалосьс соответствующим состоянием и строкой кода, включенной в URL.Однако, когда моя страница видит код ответа Google и попадает во вторую часть моего условного условия if / then, Задача всегда завершается неудачей, token.IsFaulted
всегда имеет значение true, и WASM показывает исключение: "WASM: [System.AggregateException] One orпроизошло больше ошибок. (Невозможно вызвать метод, потому что он был стерт "
Я действительно мог бы сделать с толчком в правильном направлении здесь.
@using Google.Apis.Drive.v3
@using Google.Apis.Auth.OAuth2
@using Google.Apis.Auth.OAuth2.Flows
@using Google.Apis.Auth.OAuth2.Responses
@using Google.Apis.Auth.OAuth2.Web
@using Google.Apis.Services
@using Google.Apis.Util.Store
@using System.IO
@using System.Threading
@page "/signin"
@inject HttpClient Http
@inject Microsoft.AspNetCore.Blazor.Services.IUriHelper UriHelper
@functions {
private GoogleAuthorizationCodeFlow flow;
private string[] _scopes = new string[]
{
DriveService.Scope.Drive,
DriveService.Scope.DriveReadonly,
DriveService.Scope.DriveMetadataReadonly,
DriveService.Scope.DriveAppdata,
DriveService.Scope.DriveFile
};
ClientSecrets secrets = new ClientSecrets()
{
ClientId = "a-very-long-string",
ClientSecret = "a-slightly-shorter-string"
};
protected override async Task OnInitAsync()
{
flow = new GoogleAuthorizationCodeFlow(new GoogleAuthorizationCodeFlow.Initializer(){
DataStore = new FileDataStore("My.Education.Store", false),
ClientSecrets = secrets,
Scopes = _scopes
});
Uri uri = new Uri(UriHelper.GetAbsoluteUri());
string code = uri.Query.IndexOf("code") > 0 ? uri.QueryParam()["code"] : String.Empty; // QueryParam is just an extension method
if (String.IsNullOrEmpty(code))
{
AuthorizationCodeWebApp.AuthResult result = (new AuthorizationCodeWebApp(flow, $"{uri.Scheme}://{uri.Host}:{uri.Port}/signin", uri.ToString())).AuthorizeAsync("me", CancellationToken.None).Result;
Console.WriteLine($"Redirecting to {result.RedirectUri}");
//UriHelper.NavigateTo(result.RedirectUri);
}
else
{
var token = flow.ExchangeCodeForTokenAsync("me", code, "http://locahost:5000", CancellationToken.None);
Console.WriteLine(token.IsCompleted);
Console.WriteLine($"Faulted: {token.IsFaulted}"); // always true
}
}
}