C# Microsoft Graph OnlineMeeting API返回状态:NotFound(404)错误

C# Microsoft Graph OnlineMeeting API返回状态:NotFound(404)错误,c#,azure-active-directory,microsoft-graph-api,C#,Azure Active Directory,Microsoft Graph Api,我正在尝试使用下面的代码创建在线会议,并传递应用程序注册的所有详细信息。 仍然返回404错误 static string[] scopes = new string[] { "https://graph.microsoft.com/.default" }; IConfidentialClientApplication app = ConfidentialClientApplicationBuilder.Create(LaiAppClientID).WithClie

我正在尝试使用下面的代码创建在线会议,并传递应用程序注册的所有详细信息。 仍然返回404错误


static string[] scopes = new string[] { "https://graph.microsoft.com/.default" };
    
IConfidentialClientApplication app = ConfidentialClientApplicationBuilder.Create(LaiAppClientID).WithClientSecret(Secret).WithRedirectUri(redirectURI).Build();
    
AuthorizationCodeProvider authProvider = new AuthorizationCodeProvider(app, scopesssss);
    GraphServiceClient graphClient = new GraphServiceClient(authProvider);
    
graphClient = new GraphServiceClient("https://graph.microsoft.com/beta",
                         new DelegateAuthenticationProvider(
                              async (requestMessage) =>
                              {
                                  var token = await app.AcquireTokenForClient(scopesssss).WithAuthority(String.Format("https://login.microsoftonline.com/{0}/oauth2/v2.0/token", tenantID), true).ExecuteAsync();
                                  requestMessage.Headers.Authorization = new AuthenticationHeaderValue("bearer", token.AccessToken);
                               
                              }));
    
var onlineMeeting = new OnlineMeeting
                {
                    StartDateTime = DateTimeOffset.Parse("2021-07-12T21:30:34.2444915+00:00"),
                    EndDateTime = DateTimeOffset.Parse("2021-07-12T22:00:34.2464912+00:00"),
                    Subject = "My First MS Teams Meeting",
                    AudioConferencing= audioConferencing
    
                };
    
var task = Task.Run(async () =>
                {
                    return await graphClient.Me.OnlineMeetings.Request().AddAsync(onlineMeeting);
                    
                });
var d = task.Result;


如代码所示,您可以使用获取访问令牌,然后通过MS Graph API创建onlineMeeting。请看我的代码,它运行良好

string clientId = "<your-client-id>";
string clientSecret = "<your-client-secret>";
string redirectUri = "<your-redirect-url>";
string authority = "https://login.microsoftonline.com/<tenant>";
string authorizationCode = "<the authorization code>";

string[] scopes = new string[] { "https://graph.microsoft.com/.default" };

IConfidentialClientApplication app = ConfidentialClientApplicationBuilder
    .Create(clientId)
    .WithRedirectUri(redirectUri)
    .WithClientSecret(clientSecret)
    .WithAuthority(authority)
    .Build();

AuthorizationCodeProvider auth = new AuthorizationCodeProvider(app, scopes);

GraphServiceClient graphServiceClient = new GraphServiceClient(new DelegateAuthenticationProvider(async (requestMessage) => {

    // Retrieve an access token for Microsoft Graph (gets a fresh token if needed).
    var authResult = await app.AcquireTokenByAuthorizationCode(scopes, authorizationCode).ExecuteAsync();

    // Add the access token in the Authorization header of the API request.
    requestMessage.Headers.Authorization = new AuthenticationHeaderValue("Bearer", authResult.AccessToken);
    
})
);

var onlineMeeting = new OnlineMeeting
{
    StartDateTime = DateTimeOffset.Parse("2021-07-12T21:30:34.2444915+00:00"),
    EndDateTime = DateTimeOffset.Parse("2021-07-12T22:00:34.2464912+00:00"),
    Subject = "My First MS Teams Meeting"
};

await graphServiceClient.Me.OnlineMeetings.Request().AddAsync(onlineMeeting);
string clientId=“”;
字符串clientSecret=“”;
字符串URI=“”;
字符串权限=”https://login.microsoftonline.com/";
字符串授权代码=”;
字符串[]范围=新字符串[]{”https://graph.microsoft.com/.default" };
IConfidentialClientApplicationApp=机密客户端应用程序生成器
.Create(clientId)
.WithRedirectUri(重定向URI)
.WithClientSecret(clientSecret)
.有权
.Build();
AuthorizationCodeProvider auth=新的AuthorizationCodeProvider(应用程序,范围);
GraphServiceClient GraphServiceClient=新GraphServiceClient(新DelegateAuthenticationProvider)(异步(请求消息)=>{
//检索Microsoft Graph的访问令牌(如果需要,获取新令牌)。
var authResult=await app.AcquireTokenByAuthorizationCode(作用域,authorizationCode).ExecuteAsync();
//在API请求的授权标头中添加访问令牌。
requestMessage.Headers.Authorization=新的AuthenticationHeaderValue(“承载者”,authResult.AccessToken);
})
);
var onlineMeeting=新的onlineMeeting
{
StartDateTime=DateTimeOffset.Parse(“2021-07-12T21:30:34.2444915+00:00”),
EndDateTime=DateTimeOffset.Parse(“2021-07-12T22:00:34.2464912+00:00”),
主题=“我的第一次MS团队会议”
};
等待graphServiceClient.Me.OnlineMeetings.Request().AddAsync(onlineMeeting);
注意:

authorizationCode:身份验证代码流需要首先获取此代码,然后才能获取API的访问令牌。看到这一点,您可以通过浏览器请求url并与用户登录,然后它将响应代码

权限:要使其工作,您需要添加权限(您的应用程序->API权限->MS Graph->委派权限->OnlineMeetings.ReadWrite)来创建onlineMeeting,请参阅。

参考资料:

Microsoft Graph API关于通过C#创建联机会议:

关于使用
AuthorizationCodeProvider
以及有关代码的更多信息


更新:

消息:仅允许使用应用程序权限创建联机会议 测试版支持

API(/v1.0)只支持委派权限(OnlineMeetings.ReadWrite),而不支持应用程序权限。你可以在前面的注释中看到这一点

/beta
也仅支持委托权限,请参阅:


Thanx谢谢您的回复。我已将两个权限分配给App.api权限如下:现在,我正在执行以下错误:OnlineMeetings.ReadWrite--Delegated--Read and create user’s online meetings已授予OnlineMeetings.ReadWrite.All--Application--Read and create online meetings代码:NotImplemented消息:使用应用程序创建在线会议权限仅在beta版中受支持。@sdsUser您在我的答案中尝试过代码吗?软件包Microsoft.Graph的版本是什么?我使用了最新的一个(3.12.0)。它是端点,也可以用于创建onlineMeeting,但只需
/beta
支持更新onlineMeeting。如果调用1.0 API来更新onlineMeeting,则会发生错误。是的,我尝试了您的代码。我使用的是Microsoft.Graph版本3.12,使用的是graphServiceClient.Me.OnlineMeetings.Request().AddAsync(onlineMeeting)。仍在犯错;消息:仅在测试版中支持使用应用程序权限创建联机会议。使用作用域{“};给出上述错误。并且使用作用域{“”}会给出错误MsalServiceException:AADSTS500011:在名为…Hi,@sdsUser的租户中找不到名为的资源主体。我很抱歉。我错过了你错误中的“申请许可”。API只支持委托权限,不支持应用程序权限。我在回复中将其添加为更新。