找不到API网关Websocket @Connection端点

时间:2019-05-24 19:17:44

标签: c# .net aws-sdk-net

我正在尝试从$ 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

.Net Core 2.1

AWSSDK.ApiGatewayManagementApi 3.3.100.23

谢谢!

2 个答案:

答案 0 :(得分:0)

我做了更少的相同代码,并且有效

        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();

答案 1 :(得分:0)

我最终删除了所有IAM角色,然后重新制作了它们。我猜有些配置错误,或者IAM使用任何类型的缓存系统,可能是锁定到了较旧的版本。现在正在工作。很抱歉延迟在这里发表我的发现!