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 не было выполнено.

Другие вопросы по тегам