Umbraco Async SurfaceController
Я работаю над проектом (ASP.NET MVC 5), где я использую Umbraco 7.4.3. Я пытаюсь реализовать API Google Analytics вместе с oauth2. Я использовал пример кода, доступного на платформе документации Google. После авторизации с моей учетной записью Google я получаю правильный токен обновления. Но проблема в том, что этот токен обновления возвращается в URL и не передается моим контроллером на мой взгляд, который остается пустым. У меня такое ощущение, что мой контроллер не ждет выполнения своего кода после того, как пользователь авторизовал свою учетную запись Google, следовательно, контроллер не беспокоится об операторе await.
public class GoogleAnalyticsController : SurfaceController
{
public async Task<ActionResult> Add(CancellationToken cancellationToken)
{
var result = await new AuthorizationCodeMvcApp(this, new AppFlowMetadata()).AuthorizeAsync(cancellationToken);
if (result.Credential != null)
{
var service = new AnalyticsService(new BaseClientService.Initializer
{
HttpClientInitializer = result.Credential,
ApplicationName = "Analytics Dashboard"
});
// YOUR CODE SHOULD BE HERE..
ViewBag.AccessToken = result.Credential.Token.AccessToken;
ViewBag.RefreshToken = result.Credential.Token.RefreshToken;
var list = await service.Management.AccountSummaries.List().ExecuteAsync(cancellationToken);
ViewBag.Username = list.Username;
for (int i = 0; i < list.TotalResults; i++)
{
ViewBag.WebsiteNames += list.Items[i].Name + "(" + list.Items[i].WebProperties[0].WebsiteUrl + ")";
}
return View("~/Views/Configboard.cshtml");
}
else
{
return new RedirectResult(result.RedirectUri);
}
}
PS: я попробовал этот пример кода в проекте ASP.NET MVC 5 без Umbraco, который работает отлично.
Кто-нибудь может подтолкнуть меня в правильном направлении?
1 ответ
Для всех, кто столкнулся с этой проблемой, решение было довольно простым:
Я сделал собственный маршрут для AuthCallbackController (/authcallback/indexasync) и все заработало. Поскольку Umbraco берет на себя маршрутизацию по умолчанию, этот URL-адрес был недоступен, поэтому действие authcallbackcontroller не было выполнено.