API 未找到网关 Websocket @Connection 端点
API Gateway Websocket @Connection endpoint not found
我正在尝试从 $connect 路由向可能连接的客户端发送套接字消息。我成功地从 dynamodb 检索了连接 ID。每当我尝试发送任何东西时,我都会收到错误消息:
No method found matching route %40connections/aM50DdTXCYcCGEA%3D for http method POST
我用来发送的代码:
Amazon.Runtime.AWSCredentials cd = new Amazon.Runtime.BasicAWSCredentials("*******", "******");
var domainName = request.RequestContext.DomainName;
var endpoint = $"https://{domainName}/{stage}";
context.Logger.LogLine($"API Gateway management endpoint: {endpoint}");
apiClient = new AmazonApiGatewayManagementApiClient(cd,
new AmazonApiGatewayManagementApiConfig
{
ServiceURL = endpoint,
RegionEndpoint = Amazon.RegionEndpoint.USEast2
});
Message testMessage = new Message()
{
AppId = "TestApp",
CommandData = "Testing"
};
MemoryStream stream = new MemoryStream(Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(testMessage)));
PostToConnectionResponse response = await apiClient.PostToConnectionAsync(new PostToConnectionRequest()
{
ConnectionId = Uri.EscapeUriString(existing.ConnectionId),
Data = stream
});
我似乎找不到任何可以说明为什么 POST 的端点不工作的原因(我在 nodejs 中有一个工作示例,但我们需要在 .Net 中完成)。如果有人对我如何找到问题所在有任何建议,我们将不胜感激。
我已确认端点与部署的 WebSocket API 网关 url 匹配。
Visual Studio 2017
.网络核心 2.1
AWSSDK.ApiGatewayManagementApi 3.3.100.23
谢谢!
我做了更多更少的相同代码并且有效
AmazonApiGatewayManagementApiClient client = new AmazonApiGatewayManagementApiClient(new AmazonApiGatewayManagementApiConfig() {
ServiceURL = "https://" + request.RequestContext.DomainName + "/" + request.RequestContext.Stage
});
MemoryStream stream = new MemoryStream(Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(document)));
PostToConnectionRequest postRequest = new PostToConnectionRequest()
{
ConnectionId = request.RequestContext.ConnectionId,
Data = stream
};
var result = client.PostToConnectionAsync(postRequest);
result.Wait();
我最终删除了所有 IAM 角色和 re-made 它们。我猜有些地方配置错误,或者如果 IAM 使用任何类型的缓存系统,它可能会锁定到旧版本。它现在正在工作。很抱歉延迟 post 我的发现!
我正在尝试从 $connect 路由向可能连接的客户端发送套接字消息。我成功地从 dynamodb 检索了连接 ID。每当我尝试发送任何东西时,我都会收到错误消息:
No method found matching route %40connections/aM50DdTXCYcCGEA%3D for http method POST
我用来发送的代码:
Amazon.Runtime.AWSCredentials cd = new Amazon.Runtime.BasicAWSCredentials("*******", "******");
var domainName = request.RequestContext.DomainName;
var endpoint = $"https://{domainName}/{stage}";
context.Logger.LogLine($"API Gateway management endpoint: {endpoint}");
apiClient = new AmazonApiGatewayManagementApiClient(cd,
new AmazonApiGatewayManagementApiConfig
{
ServiceURL = endpoint,
RegionEndpoint = Amazon.RegionEndpoint.USEast2
});
Message testMessage = new Message()
{
AppId = "TestApp",
CommandData = "Testing"
};
MemoryStream stream = new MemoryStream(Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(testMessage)));
PostToConnectionResponse response = await apiClient.PostToConnectionAsync(new PostToConnectionRequest()
{
ConnectionId = Uri.EscapeUriString(existing.ConnectionId),
Data = stream
});
我似乎找不到任何可以说明为什么 POST 的端点不工作的原因(我在 nodejs 中有一个工作示例,但我们需要在 .Net 中完成)。如果有人对我如何找到问题所在有任何建议,我们将不胜感激。
我已确认端点与部署的 WebSocket API 网关 url 匹配。
Visual Studio 2017
.网络核心 2.1
AWSSDK.ApiGatewayManagementApi 3.3.100.23
谢谢!
我做了更多更少的相同代码并且有效
AmazonApiGatewayManagementApiClient client = new AmazonApiGatewayManagementApiClient(new AmazonApiGatewayManagementApiConfig() {
ServiceURL = "https://" + request.RequestContext.DomainName + "/" + request.RequestContext.Stage
});
MemoryStream stream = new MemoryStream(Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(document)));
PostToConnectionRequest postRequest = new PostToConnectionRequest()
{
ConnectionId = request.RequestContext.ConnectionId,
Data = stream
};
var result = client.PostToConnectionAsync(postRequest);
result.Wait();
我最终删除了所有 IAM 角色和 re-made 它们。我猜有些地方配置错误,或者如果 IAM 使用任何类型的缓存系统,它可能会锁定到旧版本。它现在正在工作。很抱歉延迟 post 我的发现!