c# - 415 Azure 函数上不支持的媒体类型-> SignalR 服务帖子
问题描述
我正在尝试从 Azure 函数向 Azure SignalR 服务发送消息并返回 415,但我不确定如何确定问题的原因。
我已经为应用程序的前端提供了一个工作实现,其中用户和操作能够通过 SignalR 服务广播消息,但是我现在需要一个后端函数来在完成时通知用户。
我遵循的示例是这里的示例; https://github.com/Microsoft/MTC_WhackAMole.NET/blob/master/MoleDeploy.SignalR/AzureSignalR.cs
执行该函数时,它成功完成了 SendAsync() 函数,但实际上并没有触发任何事情。
var payload = new PayloadMessage()
{
Target = methodName,
Arguments = args
};
var url = $"{endpoint}/api/v1/hubs/{hubName}";
var bearer = GenerateJwtBearer(null, url, null, DateTime.UtcNow.AddMinutes(30), accessKey);
await PostJsonAsync(url, payload, bearer);
只有在 Postman 中尝试相同的请求时,我才会收到 415 错误。
在 Postman 中,我发布到以下网址;
https://xxxxxx.service.signalr.net/api/v1/hubs/{hubName}
使用不记名身份验证令牌(我知道这是正确的,因为更改它会生成与 415 相对的 401)
它发送以下有效载荷;
{"Target":"hubFunctionName","Arguments":"message to broadcast"}
我不完全确定的是张贴的身体。目标应该是集线器中的功能,而参数应该是要发送的消息吗?
查看在 PostJsonAsync() 中发送的有效负载,结果如下:
payload {AzureFunctionName.AzureSignalR.PayloadMessage}
--Arguments {object[1]}
----[0] "message to broadcast"
--Target "hubFunctionName"
集线器中的功能非常基础;
public void Send(string messageText)
{
Clients.All.broadcastMessage(messageText);
}
如果有人能指出我正确的方向,将不胜感激。
谢谢,汤姆
解决方案
根据文档,我认为arguments
必须是要发送的消息数组。您能否确认您正在 Postman 中进行相同的测试。
此外,Azure Functions v2 有一个可以直接使用的Azure SignalR 服务输出绑定,而不是自己编写此代码。
推荐阅读
- json - 当连接用于过滤时,无法在过滤后的 where 子句中执行 json 操作,然后强制转换文本。Where 子句执行过早
- powerapps - 如何在powerapps中参数化api url?
- laravel - Laravel Echo + Laravel Passport 身份验证在私有/存在 websockets 通道中
- ksh - 如何从 Korn Shell 的输出中删除用户名/主机名行?
- python - Python Discord.py `time.sleep()` 协程
- python - 我的 python 程序的最后一部分有问题
- scala - Scala:播放无法识别测试组件
- node.js - Socket.io 发出未调用
- java - 将多个节点存储到 Firebase 实时数据库
- python - 在 For 循环 Matplotlib 中创建子图