我正在尝试将成员添加到群组中。我可以在我的组织中列出所有组,通过电子邮件获取用户,获取所有用户以及我甚至可以从组中删除成员但我无法添加一个 - 返回的错误是{{1} }。
这是与函数签名相同的函数:(我确实有400 Bad Request
,有效的组ID和有效的成员ID)
我已经确认身体数据看起来正确,至少从我example in the docs可以看到。
不确定我还能添加什么来让事情变得更清楚,请问并且我会更新
accesstoken
感谢任何人提供的任何帮助 - 这是我必须要做的最后一次免费电话
答案 0 :(得分:2)
为任何关心未来的人找到了问题:
var body = new FormUrl...
我的代码不正确,需要的是一个简单的json字符串更改为 UPDATED :
var jsonData = $@"{{ ""{keyOdataId}"": ""{valueODataId}"" }}";
var body = new StringContent(jsonData, Encoding.UTF8, "application/json");
我通常会将这些值放在一个类中,但这是为了证明概念,json键需要看起来像这样@odata.id
答案 1 :(得分:2)
澄清这里发生的事情:
此调用的请求正文应为JSON编码(application/json
)。 FormUrlEncodedContent方法将字典作为表单编码(application/x-www-form-urlencoded
)返回。
你可以手工编写JSON(就像你到目前为止),但更好的解决方案是利用Json.NET。这将使您encode the dictionary的方式与FormUrlEncodedContent
的方式非常相似:
var values = new Dictionary<string, string>
{
{ keyOdataId, valueODataId}
};
var body = JsonConvert.SerializeObject(values);
如果您要使用Microsoft Graph进行大量工作,我强烈建议您切换到Microsoft Graph .NET SDK。
使用SDK,这里的方法会更简单:
public async Task<string> AddGroupMember(string groupId, string memberId)
{
GraphServiceClient graphClient = AuthenticationHelper.GetAuthenticatedClient();
User userToAdd = new User { Id = memberId };
await graphClient.Groups[groupId].Members.References.Request().AddAsync(userToAdd);
}