Umbraco Async SurfaceController

时间:2016-04-21 08:47:47

标签: asp.net-mvc async-await umbraco7 surface-controller

我正在开发一个项目(ASP.NET MVC 5),我正在使用Umbraco 7.4.3。我正在尝试使用oauth2实现google analytics api。我使用了google文档平台上提供的示例代码。在使用我的Google帐户授权后,我获得了正确的刷新令牌。但问题是这个刷新令牌是在URL中返回的,并且没有被我的控制器传递给我的视图,该视图仍然是空的。我感觉我的控制器在用户授权他或她的谷歌帐户后不等待执行它的代码,因此控制器不会对等待操作员感到困扰。

Link to the sample code

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:我在没有安装Umbraco的ASP.NET MVC 5项目中试过这个示例代码,效果很好。

任何人都能把我推向正确的方向吗?

1 个答案:

答案 0 :(得分:2)

对于其他任何遇到此问题的人来说,解决方案实际上非常简单:

我为AuthCallbackController(/ authcallback / indexasync)创建了一个自定义路由,这一切都奏效了。由于Umbraco接管了默认路由,因此无法访问此URL,因此未执行authcallbackcontroller的操作。