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.

La ruta ‘0’ requiere que se especifiquen Hosts o Paths. Establezca el Path a ‘/{**catchall}’ para que coincida con todas las solicitudes.

Estoy tratando de usar Yarp en mi aplicación de gateway para enrutar mis aplicaciones. Sin embargo, tan pronto como se inicia, obtengo “La ruta ‘0’ requiere hosts o ruta especificada. Establece la ruta a ‘/{**catchall}’ para coincidir con todas las solicitudes.”

Aquí está mi archivo AppSettings:

"ReverseProxy": {
  "Routes": [
    {
      "SampleService": {
        "ClusterId": "SampleService-cluster1",
        "Match": {
          "Host": "localhost",
          "Path": "sample/{**catchall}"
        }
      },
      "NotificationService": {
        "ClusterId": "NotificationService-cluster",
        "Match": {
          "Host": "localhost",
          "Path": "api/NotificationService/{**catchall}"
        }
      }
    }
  ],
  "Clusters": {
    "SampleService-cluster1": {
      "Destinations": { "SampleService-cluster1/destination1": { "Address": "http://127.0.0.1:6500" } }
    },
    "NotificationService-cluster": {
      "Destinations": { "NotificationService-cluster/destination1": { "Address": "http://*:6020" } }
    }
  }
}

ConfigureServices:

public void ConfigureServices(IServiceCollection services)
{
    services.AddHttpClient();
    services.AddCors(options =>
    {
        options.AddPolicy("any", builder =>
        {
            builder.AllowAnyOrigin()
                   .AllowAnyMethod()
                   .AllowAnyHeader();
        });
    });
services.AddControllers();

services.AddTelemetryConsumer<forwardertelemetry>();

services.AddReverseProxy()
    .LoadFromConfig(Configuration.GetSection("ReverseProxy"));
}

Y obtengo esto:
System.InvalidOperationException

Entonces, ¿alguna idea de cómo puedo solucionar esto?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    El mensaje de error sugiere que una o más rutas en el archivo de configuración no tienen especificado un host o ruta válidos. Para solucionar esto, debes revisar el archivo de configuración y asegurarte de que cada ruta tenga un host y ruta válidos especificados.

    En este caso específico, parece que la sección “Match” para cada ruta especifica la ruta pero no el host. Debes agregar un valor de host válido para cada ruta. Por ejemplo, podrías usar “localhost” u otro nombre de host válido para tu configuración.

    Aquí tienes un archivo de configuración actualizado que incluye un host válido para cada ruta:

     "ReverseProxy": {
        "Routes": [
          {
            "SampleService": {
              "ClusterId": "SampleService-cluster1",
              "Match": {
                "Host": "localhost",
                "Path": "sample/{**catchall}"
              }
            },
            "NotificationService": {
              "ClusterId": "NotificationService-cluster",
              "Match": {
                "Host": "localhost",
                "Path": "api/NotificationService/{**catchall}"
              }
            }
          }
        ],
        "Clusters": {
          "SampleService-cluster1": {
            "Destinations": { "SampleService-cluster1/destination1": { "Address": "http://127.0.0.1:6500" } }
          },
          "NotificationService-cluster": {
            "Destinations": { "NotificationService-cluster/destination1": { "Address": "http://*:6020" } }
          }
        }
      }
    

    Ten en cuenta que el valor de “Host” debe corresponder al nombre de host o dirección IP a la cual se enviará la solicitud. En este caso, es “localhost” porque los servicios se están ejecutando en la misma máquina que la aplicación de la puerta de enlace. Si tus servicios se ejecutan en una máquina diferente, deberás usar el nombre de host o la dirección IP de esa máquina en su lugar.

Comments are closed.