Umbraco 异步表面控制器
Umbraco Async SurfaceController
我正在开发一个项目 (ASP.NET MVC 5),我正在使用 Umbraco 7.4.3。我正在尝试与 oauth2 一起实施 google 分析 api。我使用了 google 文档平台上提供的示例代码。使用我的 google 帐户授权后,我获得了正确的刷新令牌。但问题是这个刷新令牌在 URL 中返回并且没有被我的控制器传递到我的视图,它仍然是空的。我有一种感觉,在用户授权他或她的 google 帐户后,我的控制器不会等待执行它的代码,因此控制器不会为等待运算符而烦恼。
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 项目中尝试了这个示例代码,它工作得很好。
任何人都可以将我推向正确的方向吗?
对于遇到此问题的其他人,解决方案实际上非常简单:
我为 AuthCallbackController (/authcallback/indexasync) 创建了一个自定义路由,并且一切正常。因为 Umbraco 接管了默认路由,所以此 URL 无法访问,因此未执行 authcallbackcontroller 的操作。
我正在开发一个项目 (ASP.NET MVC 5),我正在使用 Umbraco 7.4.3。我正在尝试与 oauth2 一起实施 google 分析 api。我使用了 google 文档平台上提供的示例代码。使用我的 google 帐户授权后,我获得了正确的刷新令牌。但问题是这个刷新令牌在 URL 中返回并且没有被我的控制器传递到我的视图,它仍然是空的。我有一种感觉,在用户授权他或她的 google 帐户后,我的控制器不会等待执行它的代码,因此控制器不会为等待运算符而烦恼。
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 项目中尝试了这个示例代码,它工作得很好。
任何人都可以将我推向正确的方向吗?
对于遇到此问题的其他人,解决方案实际上非常简单:
我为 AuthCallbackController (/authcallback/indexasync) 创建了一个自定义路由,并且一切正常。因为 Umbraco 接管了默认路由,所以此 URL 无法访问,因此未执行 authcallbackcontroller 的操作。