Tengo dos servicios, una REST api que se comunica con otro servicio usando grpc.
Intentando leer los encabezados de metadatos de respuesta en la API REST con un interceptor grpc y establecer los valores en los encabezados de respuesta http. Funciona bien para la mayoría de las solicitudes, pero a veces falla debido a que HttpContext es nulo. Probablemente porque la solicitud http ya respondió, por lo que HttpContext ya no existe.
¿Puede ser este el caso y se puede resolver de otra manera?
public class SetHeaderInterceptor : Interceptor { private readonly IHttpContextAccessor _httpContext; public SetHeaderInterceptor(IHttpContextAccessor httpContext) { _httpContext = httpContext; } public override AsyncUnaryCall<TResponse> AsyncUnaryCall<TRequest, TResponse>(TRequest request, ClientInterceptorContext<TRequest, TResponse> context, AsyncUnaryCallContinuation<TRequest, TResponse> continuation) { var call = continuation(request, context); var response = new AsyncUnaryCall<TResponse>(call.ResponseAsync, HandleHeader<Metadata>(call.ResponseHeadersAsync), call.GetStatus, call.GetTrailers, call.Dispose); return response; } private async Task<Metadata> HandleHeader<TResponse>(Task<Metadata> responseHeadersAsync) { try { var response = await responseHeadersAsync; string header = response.GetValue("HeaderKey"); if (!string.IsNullOrEmpty(header)) { if (_httpContext?.HttpContext?.Request != null) { _httpContext.HttpContext.Response.Headers.Add("HeaderKey", header); } } return response; } catch (RpcException ex) { return default; } } }