es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo obtener el nombre del método desde HttpRequestMessage?

Tengo un controlador como el siguiente y quiero obtener el nombre del método del Controlador. Al utilizar var methodName = request.Method; solo se devuelve el tipo de método, como ‘GET’ o ‘POST’. ¿Cómo puedo obtener el nombre del método, ej. desde ‘http://localhost: 4200 / weatherforecast / getitem / 2’, quiero devolver “getitem”.

public class RequestAndResponseHandler : DelegatingHandler
{
    protected override async Task<HttpResponseMessage> SendAsync(
    HttpRequestMessage request, CancellationToken cancellationToken)
    {
        if (request.Content != null)
        {
            string requestBody = await request.Content.ReadAsStringAsync();
            Trace.WriteLine(requestBody);
        }
        var response = await base.SendAsync(request, cancellationToken);

        if (response.Content != null)
        {
            var responseBody = await response.Content.ReadAsStringAsync();
            Trace.WriteLine(responseBody);
        }

        var methodName = request.Method;

        return response;
    }
}
Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para obtener el nombre del método de Controller en lugar del tipo de método (es decir, “GET” o “POST”), se puede analizar el request.RequestUri y extraer el nombre del método de la ruta.

    Así es como se puede modificar el método SendAsync para lograr esto:

    protected override async Task<httpresponsemessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
    {
        if (request.Content != null)
        {
            string requestBody = await request.Content.ReadAsStringAsync();
            Trace.WriteLine(requestBody);
        }
    
        var response = await base.SendAsync(request, cancellationToken);
    
        if (response.Content != null)
        {
            var responseBody = await response.Content.ReadAsStringAsync();
            Trace.WriteLine(responseBody);
        }
    
        var path = request.RequestUri.LocalPath;
        var segments = path.Split('/', StringSplitOptions.RemoveEmptyEntries);
        var methodName = segments.LastOrDefault();
    
        return response;
    }
    

    Aquí, primero obtenemos la path del request.RequestUri, que contiene el punto final y los parámetros de consulta. Luego, utilizando el método Split, dividimos la ruta en una matriz de segmentos, y extraemos el último segmento, que es el nombre del método.

    Asignamos este valor a la variable methodName y lo devolvemos. Ahora, cuando se realiza una solicitud al punto final de la API, el método SendAsync extraerá correctamente el nombre del método y lo devolverá.

Comments are closed.