仅应用程序令牌获取用户但无法创建订阅?

时间:2018-04-06 16:07:49

标签: asp.net-core asp.net-core-mvc microsoft-graph

我正在使用“仅限应用”令牌来检索我的用户,这些用户工作正常。

一旦应用程序遍历用户,它就应该创建订阅,如下所示。

但是,在尝试创建订阅时,请求只返回:

  

代码:InvalidRequest消息:无法连接到远程服务器

     

内部错误

我的问题是,当我显然能够在检索用户的第一个请求中成功连接时,为什么订阅请求无法连接

如何查看内部错误?

string tenantId = appSettings.TenantId;

var client = sdkHelper.GetAuthenticatedClientAppOnly(tenantId);

// this request works...
IGraphServiceUsersCollectionPage users = await client.Users.Request().Filter("userPrincipalName eq 'MY_USER_PRINCIPAL_NAME'").GetAsync();

if (users?.Count > 0)
{
    foreach (User user in users)
    {
        // this request doesn't work...
        Subscription newSubscription = new Subscription();
        string clientState = Guid.NewGuid().ToString();
        newSubscription = await client.Subscriptions.Request().AddAsync(new Subscription
        {
            Resource = $"users/{ user.Id }@{ tenantId }/mailFolders('Inbox')/messages",
            //Resource = $"users/{ user.UserPrincipalName }/mailFolders('Inbox')/messages", // also tried using email address
            ChangeType = "created",
            NotificationUrl = "https://localhost:44334/notification/listen",
            ClientState = clientState,
            //ExpirationDateTime = DateTime.UtcNow + new TimeSpan(0, 0, 4230, 0) // current maximum lifespan for messages
            ExpirationDateTime = DateTime.UtcNow + new TimeSpan(0, 0, 15, 0)     // shorter duration useful for testing
        });
    }
}

当我在try / catch中包装调用时,错误消息就是这样,没有内部异常:

  

抛出了类型'Microsoft.Graph.ServiceException'的异常。

我已经尝试了所有三个资源网址,但都导致了如上所示的相同错误:

  • 资源= $"users/{ user.Id }/mailFolders('Inbox')/messages",
  • 资源= $"users/{ user.Id }@{ tenantId }/mailFolders('Inbox')/messages",
  • 资源= $"users/{ user.UserPrincipalName }/mailFolders('Inbox')/messages",

我在github上发现了这个帖子,但请求对我来说似乎不起作用。

  1. 允许仅应用程序请求创建订阅 - https://github.com/microsoftgraph/microsoft-graph-docs/issues/238

1 个答案:

答案 0 :(得分:1)

NotificationUrl不能是“ localhost !”请求是从远程服务器发送的,所以它不知道localhost会是什么,因此它失败了。如果我将项目部署到远程服务器并传递URL,它可能会起作用。我会试试......

相关问题