Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# AWS Api网关Web套接字发布到$default禁止_C#_Amazon Web Services_Websocket_Aws Api Gateway - Fatal编程技术网

C# AWS Api网关Web套接字发布到$default禁止

C# AWS Api网关Web套接字发布到$default禁止,c#,amazon-web-services,websocket,aws-api-gateway,C#,Amazon Web Services,Websocket,Aws Api Gateway,我试图让我的lambda发布到我的awswebsocketapi,我在帖子上收到了一条禁止的错误消息。我有以下设置: 使用proxy+配置的公共api,指向处理所有路由的lambda 调用上述lambda的公共web套接字api 我正在测试连接性,我的lambda正确地从web套接字api接收$connect、$default和$disconnect事件。我试图在打开时将测试消息发送回客户端,但在Post命令中收到禁止的错误 我的代码在这里: public async Task<I

我试图让我的lambda发布到我的awswebsocketapi,我在帖子上收到了一条禁止的错误消息。我有以下设置:

  • 使用proxy+配置的公共api,指向处理所有路由的lambda
  • 调用上述lambda的公共web套接字api
  • 我正在测试连接性,我的lambda正确地从web套接字api接收$connect、$default和$disconnect事件。我试图在打开时将测试消息发送回客户端,但在Post命令中收到禁止的错误

    我的代码在这里:

        public async Task<ITrWebsocketsContext> SendMessageAsync(UserDefinition userDefinition, string message)
        {
            var connectionIds = GetConnectionIds(userDefinition);
            if (connectionIds != null)
            {
                foreach (var connectionId in connectionIds)
                {
                    try
                    {
                        Console.WriteLine($"Sending to {connectionId}");
                        var response = await PostAsync($"https://{suppliedServiceUrl}/@connections/{connectionId}", message);
                        Console.WriteLine($"Sent to {connectionId}: {response}");
                    }
                    catch (ForbiddenException ex)
                    {
                        Console.WriteLine($"Exception: {SerialisableException.Serialise(ex)}");
                    }
                    catch (AmazonServiceException ex)
                    {
                        Console.WriteLine($"Exception: {SerialisableException.Serialise(ex)}");
                        RemoveConnection(connectionId);
                    }
                    catch (Exception ex)
                    {
                        throw;
                    }
                }
            }
    
            return this;
        }
    
    public async Task sendmagesasync(UserDefinition UserDefinition,string message)
    {
    var connectionIds=GetConnectionIds(userDefinition);
    if(connectionId!=null)
    {
    foreach(connectionId中的变量connectionId)
    {
    尝试
    {
    WriteLine($“发送到{connectionId}”);
    var response=wait PostAsync($“https://{suppliedServiceUrl}/@connections/{connectionId}”,message);
    WriteLine($“发送到{connectionId}:{response}”);
    }
    捕获(禁止例外)
    {
    Console.WriteLine($“异常:{SerialisableException.Serialise(ex)}”);
    }
    捕获(AmazonServiceException ex)
    {
    Console.WriteLine($“异常:{SerialisableException.Serialise(ex)}”);
    移除连接(connectionId);
    }
    捕获(例外情况除外)
    {
    投掷;
    }
    }
    }
    归还这个;
    }
    
    对PostAsync的调用失败

    我认为这是一个专有网络问题,因为Lambda是专有网络的幕后操纵者。VPC配置有2个专用子网和1个公用子网,以及一个Internet网关。lambda可以访问互联网,因此VPC似乎设置正确。我还有一个端点指向我所在区域的执行api


    去哪里有什么想法吗?我是否需要为我的lambda配置一个VPC链接以连接到我的AWS web Socket api?

    看起来您的websocket api中默认路由中的执行角色没有权限执行您选择的资源。@Ali,这是我假设的,但是调用post命令的lambda具有执行api:*针对InvalidateCache、Invoke和ManageConnections访问所有资源。我遇到的另一个原因是lambda执行的角色也应该具有访问VPC的权限。