无法将类型为List [Microsoft.Graph.ChatMessageHostedContent]的对象强制转换为“ Microsoft.Graph.IChatMessageHostedContentsCollectionPage”

问题描述

我一直面临以下问题:

无法转换类型的对象 '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);

以下问题指的是同一问题。

Unable to post inline images along with the message in Microsoft Teams via Microsoft Graph API using C#

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...