Получить исходную строку запроса GraphQL из HTTP-запросаC#

Место общения программистов C#
Ответить
Anonymous
 Получить исходную строку запроса GraphQL из HTTP-запроса

Сообщение Anonymous »

Я работаю над внутренней службой GraphQL на C# (.NET8 Web Api), которая является прокси-сервером для другой службы GraphQL (существующее приложение «черный ящик» с API GraphQL, неизвестная реализация). Мне нужно проксировать полезную нагрузку на удаленную конечную точку GraphQL черного ящика, добавить дополнительные заголовки аутентификации и т. д. Кроме того, разработанный мной сервис будет виден в прокси-сервисе (технически это прокси-интерфейсный сервис), используя сшивку схемы GraphQL. Служба внешнего интерфейса прокси не будет иметь никаких возможностей графического интерфейса, кроме сшивания схем и реализации запросов/мутаций. Он покажет только то, что мой сервис предоставляет на своей конечной точке GraphQL.
У меня есть две идеи:
1: перехватывать каждый HTTP-запрос, фильтровать реальные вызовы GraphQL, извлеките исходную полезную нагрузку тела HTTP-запроса, а затем отправьте ее с помощью HttpClient для исходной службы GraphQL.
Мне не удалось сделать это с перехватчиком, исходная полезная нагрузка тела HTTP-запроса будет удален после того, как Hotchocolate GraphQL завершит его анализ. RequestBuilder будет иметь исходную полезную нагрузку по частям, и я не уверен на 100%, что смогу собрать исходную (почти нет).

Код: Выделить всё

public class HttpRequestInterceptor : DefaultHttpRequestInterceptor
{
public override ValueTask OnCreateAsync(HttpContext context,
IRequestExecutor requestExecutor, OperationRequestBuilder requestBuilder,
CancellationToken cancellationToken)
{

//Extract original query from context and send it by HttpClient -> context.Request.Body is empty            after GraphQL processing

return base.OnCreateAsync(context, requestExecutor, requestBuilder,
cancellationToken);
}
}
Возможно, мне удастся отловить это раньше с помощью промежуточного программного обеспечения .NET, но тогда мне придется отфильтровывать проверки работоспособности и другие запросы, не относящиеся к GraphQL, что было бы неоптимально.
2. Получите частичный запрос из RequestBuilder для каждого запроса:
Я настроил конечную точку запроса GraphQL следующим образом:

Код: Выделить всё

public IEnumerable GetFoo([Service] IQueryRequestBuilder requestBuilder)
{
//If this GraphQL query endpoint is being hit, extract the query for this endpoint only from requestBuilder, then forward it by HttpClient
}

public IEnumerable GetFooAlternative([Service] IQueryRequestBuilder requestBuilder)
{
//If this GraphQL query endpoint is being hit, extract the query for this endpoint only from requestBuilder, then forward it by HttpClient
}
Какое решение должно быть лучшим? Если это вообще возможно. Или я сбился с пути и мне следует попробовать другой подход?

Подробнее здесь: https://stackoverflow.com/questions/786 ... tp-request
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»