问题描述
我一直面临以下问题:
无法转换类型的对象 'System.Collections.Generic.List`1 [Microsoft.Graph.ChatMessageHostedContent]' 键入“ Microsoft.Graph.IChatMessageHostedContentsCollectionPage”
当我尝试使用Microsoft Graph SDK在Microsoft Teams中发布图像以及聊天消息时。我使用了最新的Microsoft.Graph.Beta(0.25.0-preview)和Microsoft.Graph.Core(1.21.0)Nuget包,并使用了以下链接中的全部代码:
https://docs.microsoft.com/en-us/graph/api/chatmessage-post?view=graph-rest-beta&tabs=csharp#request
代码:
GraphServiceClient graphClient = new GraphServiceClient( authProvider );
var chatMessage = new ChatMessage
{
Subject = null,Body = new ItemBody
{
ContentType = BodyType.Html,Content = "<attachment id=\"74d20c7f34aa4a7fb74e2b30004247c5\"></attachment>"
},HostedContents = (IChatMessageHostedContentsCollectionPage)new List<ChatMessageHostedContent>()
{
new ChatMessageHostedContent
{
ContentBytes = Encoding.ASCII.GetBytes("iVBORw0KGgoAAAANSUhEUgAAA..."),ContentType = "image/png",AdditionalData = new Dictionary<string,object>()
{
{"@microsoft.graph.temporaryId","1"}
}
},new ChatMessageHostedContent
{
ContentBytes = Encoding.ASCII.GetBytes("iVBORw0KGgoAAAANSUhEUgAAA..."),"2"}
}
}
}
};
await graphClient.Teams["{id}"].Channels["{id}"].Messages
.Request()
.AddAsync(chatMessage);
有人可以帮我解决这个问题吗?
解决方法
最后,问题已经解决。
工作代码:
IChatMessageHostedContentsCollectionPage chatMessageHostedContentsCollectionPage = new ChatMessageHostedContentsCollectionPage();
string imageBase64Text = Convert.ToBase64String(System.IO.File.ReadAllBytes(currentImageFullPath));
ChatMessageHostedContent chatMessageHostedContent = new ChatMessageHostedContent
{
ContentBytes = Encoding.ASCII.GetBytes(imageBase64Text),ContentType = "image/jpeg",AdditionalData = new Dictionary<string,object>()
{
{"@microsoft.graph.temporaryId","1"}
},};
chatMessageHostedContentsCollectionPage.Add(chatMessageHostedContent);
//Its working fine with the below code.
chatMessage.HostedContents = chatMessageHostedContentsCollectionPage;
ChatMessage sentMessage = await graphClient.Teams["{id}"].Channels["{id}"].Messages
.Request()
.AddAsync(chatMessage);
请注意,以下代码集仍然存在相同的问题:
List<ChatMessageHostedContent> chatMessageHostedContents = new List<ChatMessageHostedContent>();
chatMessageHostedContents.Add(chatMessageHostedContent);//chatMessageHostedContent is used from above **working code**.
//Below statement actually gives the exception.
chatMessage.HostedContents = (IChatMessageHostedContentsCollectionPage) chatMessageHostedContents;
尽管工作代码已经解决了该异常,但是在Microsoft Teams中发布图像和文本时,Microsoft Graph Beta API下ChatMessage的HostedContents属性仍然存在一些问题。上面的工作代码为我们提供了以下例外。
代码:BadRequest消息:发送了无效的请求正文。内部错误: AdditionalData:date:2020-09-24T19:18:55 request-id: 298a3ea5-827f-4375-a0d5-ee619dd834a6客户端请求ID: 298a3ea5-827f-4375-a0d5-ee619dd834a6 ClientRequestId: 298a3ea5-827f-4375-a0d5-ee619dd834a6
我什至尝试使用下面的代码段,但它给出了“未知错误”异常,通常在Microsoft Graph API不可用时发生。
await graphClient.Teams["{id}"].Channels["{id}"].Messages[sentMessage.Id].HostedContents
.Request()
.AddAsync(chatMessageHostedContent);
以下问题指的是同一问题。