예제 #1
0
 public static Task SendHttpError(HttpResponse response, StatusCode statusCode, string message)
 {
     response.StatusCode = StatusCodes.Status415UnsupportedMediaType;
     response.AppendTrailer(GrpcProtocolConstants.StatusTrailer, statusCode.ToTrailerString());
     response.AppendTrailer(GrpcProtocolConstants.MessageTrailer, message);
     return(response.WriteAsync(message));
 }
 public static Task SendHttpError(HttpResponse response, int httpStatusCode, StatusCode grpcStatusCode, string message)
 {
     response.StatusCode = httpStatusCode;
     response.AppendTrailer(GrpcProtocolConstants.StatusTrailer, grpcStatusCode.ToTrailerString());
     response.AppendTrailer(GrpcProtocolConstants.MessageTrailer, message);
     return(response.WriteAsync(message));
 }
        public static void ConsolidateTrailers(this HttpResponse httpResponse, HttpContextServerCallContext context)
        {
            if (context.HasResponseTrailers)
            {
                foreach (var trailer in context.ResponseTrailers)
                {
                    // TODO(juntaoluo): What about binary trailers
                    if (!trailer.IsBinary)
                    {
                        httpResponse.AppendTrailer(trailer.Key, trailer.Value);
                    }
                }
            }

            // Append status trailers, these overwrite any existing status trailers set via ServerCallContext.ResponseTrailers
            httpResponse.AppendTrailer(GrpcProtocolConstants.StatusTrailer, context.Status.StatusCode.ToTrailerString());
            httpResponse.AppendTrailer(GrpcProtocolConstants.MessageTrailer, context.Status.Detail);
        }
        public static void ConsolidateTrailers(this HttpResponse httpResponse, HttpContextServerCallContext context)
        {
            if (context.HasResponseTrailers)
            {
                foreach (var trailer in context.ResponseTrailers)
                {
                    if (trailer.IsBinary)
                    {
                        httpResponse.AppendTrailer(trailer.Key, Convert.ToBase64String(trailer.ValueBytes));
                    }
                    else
                    {
                        httpResponse.AppendTrailer(trailer.Key, trailer.Value);
                    }
                }
            }

            // Append status trailers, these overwrite any existing status trailers set via ServerCallContext.ResponseTrailers
            GrpcProtocolHelpers.AppendStatusTrailers(httpResponse, context.Status);
        }
예제 #5
0
 public static void AppendStatusTrailers(HttpResponse response, Status status)
 {
     response.AppendTrailer(GrpcProtocolConstants.StatusTrailer, status.StatusCode.ToTrailerString());
     response.AppendTrailer(GrpcProtocolConstants.MessageTrailer, status.Detail);
 }
예제 #6
0
        /// <summary>
        /// Sets the Server-Timing trailer header value.
        /// </summary>
        /// <param name="response">The response.</param>
        /// <param name="metrics">The metrics.</param>
        public static void SetServerTimingTrailer(this HttpResponse response, params ServerTimingMetric[] metrics)
        {
            ServerTimingHeaderValue serverTiming = new ServerTimingHeaderValue(metrics);

            response.AppendTrailer(HeaderNames.ServerTiming, serverTiming.ToString());
        }
예제 #7
0
 /// <summary>
 /// Sets the Server-Timing trailer header value.
 /// </summary>
 /// <param name="response">The response.</param>
 /// <param name="serverTiming">The Server-Timing header value.</param>
 public static void SetServerTimingTrailer(this HttpResponse response, ServerTimingHeaderValue serverTiming)
 {
     response.AppendTrailer(HeaderNames.ServerTiming, serverTiming?.ToString());
 }