【问题标题】:Umbraco Async SurfaceControllerUmbraco 异步 SurfaceController
【发布时间】:2016-04-21 08:47:46
【问题描述】:

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

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 项目中尝试了这个示例代码,效果很好。

有谁能把我推向正确的方向?

【问题讨论】:

  • 控制器操作的 URL 是什么?当你在动作中设置断点时,它会被命中吗?
  • /umbraco/surface/googleanalytics/add.当我设置断点时,它确实会被命中,但结果始终为空。
  • 调试时,传递给action的cancel token是否有你期望的值?
  • 是的。我很确定问题出在 await 操作员身上。因为身份验证没有任何问题。问题是代码没有等待用户的响应..

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


【解决方案1】:

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

我为 AuthCallbackController (/authcallback/indexasync) 制作了一条自定义路由,并且一切正常。由于 Umbraco 接管了默认路由,因此无法访问此 URL,因此未执行 authcallbackcontroller 的操作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多