Skip to content

GraphQL subscription error missing header #662

@kiennt300599

Description

@kiennt300599

I am trying to use AppSync for my project. Although I have handled everything according to the design documentation, I keep encountering the error:
{"payload":{"errors":[{"message":"Required headers are missing.","errorCode":400}]},"type":"connection_error"}
every time I create a subscription to listen. Is this a bug, or am I missing something? Please help me resolve this issue.

public static class AppSyncService
{
private static GraphQLHttpClient _client;
private static IDisposable _subscription;
private static string _apiUrl;
private static string _wssUrl;
private static string _apiKey;
private static string _serverID;
public static event Action OnNewItemReceived;

  public static void Initialize(string apiUrl, string wssUrl, string apiKey, string serverID)
  {
      _apiUrl = apiUrl;
      _wssUrl = wssUrl;
      _apiKey = apiKey;
      _serverID = serverID;

      ConnectToAppSync();
  }

  private static void ConnectToAppSync()
  {
      var options = new GraphQLHttpClientOptions
      {
          EndPoint = new Uri(_apiUrl),
          WebSocketEndPoint = new Uri(_wssUrl),
          WebSocketProtocol = "graphql-ws",
          MediaType = "application/json",
      };

      _client = new GraphQLHttpClient(options, new NewtonsoftJsonSerializer());
      _client.HttpClient.DefaultRequestHeaders.Add("x-api-key", _apiKey);

      Subscribe(_serverID);
  }

  private static void Subscribe(object variables)
  {
      try
      {
          var request = new GraphQLRequest
          {
              Query = @"
              subscription MySubscription($room_id: String!) {
                  onCreateMyChatMessageModel(room_id: $room_id) {
                      display_name
                      message_body
                      message_type
                      msg_id
                      room_id
                      timestamp
                      timestamp_msg_id
                      user_id
                  }
              }",
              Variables = variables
          };

          var subscriptionStream = _client.CreateSubscriptionStream<string>(request);

          _subscription = subscriptionStream.Subscribe(
          source =>
          {
              var newItem = source.Data;
              Debug.Log($"AppSync New item created: {newItem}");

              OnNewItemReceived?.Invoke(newItem);
          },
          error => Debug.Log($"AppSync error: {error.Message}"),

          () => Debug.Log("AppSync subscription completed."));
      }
      catch (Exception e)
      {
          Debug.Log($"AppSync subscribe error {e}");
      }
  }
  private static void Dispose()
  {
      _subscription?.Dispose();
      _client.Dispose();
      Debug.Log("AppSync subscription and client disposed.");
  }

}

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions