我正在使用“仅限应用”令牌来检索我的用户,这些用户工作正常。
一旦应用程序遍历用户,它就应该创建订阅,如下所示。
但是,在尝试创建订阅时,请求只返回:
代码: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上发现了这个帖子,但请求对我来说似乎不起作用。
答案 0 :(得分:1)
NotificationUrl不能是“ localhost !”请求是从远程服务器发送的,所以它不知道localhost会是什么,因此它失败了。如果我将项目部署到远程服务器并传递URL,它可能会起作用。我会试试......