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.

Estoy recibiendo un error al acceder a las llamadas a la API cuando se despliega en una subcarpeta.

He desarrollado una aplicación web utilizando ABP.IO versión 5.0 (también mismo problema con la versión 4.4.3) y .NET Core Razor pages. En el entorno de desarrollo, todo funciona bien. Si despliego la aplicación en IIS como un sitio de nivel raíz (accesible a través de la URL https://{mi sitio}), todo funciona bien. Pero si lo despliego como una aplicación dentro de un sitio de nivel raíz (accesible a través de la URL https://{sitio padre}/{mi sitio}), puedo acceder a la página de inicio de sesión y llegar al Identity Server, pero todas las llamadas subsecuentes hacia la API fallan. La URL de las llamadas a la API no incluyen la porción {mi sitio} y obtengo un error 404. Las llamadas a la API aparecen como https://{sitio padre}/api/{controlador}/{método} en lugar de https://{sitio padre}/{mi sitio}/api/{controlador}/{método}.

Encontré un ajuste en el archivo appsettings.json (AppSelfURL) que pensé que podría resolver el problema, pero no hizo nada.

¿Existe algún ajuste que obligue a la aplicación a conservar la URL base completa al realizar las llamadas a la API?

Tags:  

Answer

  1. Avatar for davy.ai

    Problema de implementación de la aplicación web ABP.IO con enrutamiento de URL

    Si ha desarrollado una aplicación web utilizando ABP.IO versión 5.0 o 4.4.3 en páginas Razor de .NET Core, es posible que se encuentre con un problema de enrutamiento de URL al implementar la aplicación en IIS bajo un sitio de nivel raíz.

    El problema es que todas las llamadas subsiguientes a la API fallan porque la URL omite la porción {mi sitio}, lo que resulta en un error 404. Las llamadas a la API se ven así: https://{sitio padre}/api/{controlador}/{método} en lugar de https://{sitio padre}/{mi sitio}/api/{controlador}/{método}.

    Una posible solución es revisar el archivo appsettings.json en busca de la configuración AppSelfURL, que le permite especificar la URL base de la aplicación. Sin embargo, cambiar esta configuración puede no resolver el problema.

    Una solución alternativa es agregar una configuración para forzar que la aplicación mantenga la URL base completa al realizar llamadas a la API. Esto se puede hacer modificando el archivo Startup.cs y agregando el siguiente código al método ConfigureServices:

    services.Configure<forwardedheadersoptions>(options =>
    {
        options.ForwardedHeaders =
            ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto;
        options.KnownNetworks.Clear();
        options.KnownProxies.Clear();
    });
    

    Este código configura el middleware para usar encabezados reenviados y determinar la URL original de la solicitud. Borra las redes y proxies conocidos para evitar el reenvío desde fuentes no confiables.

    Después de realizar este cambio, debería poder implementar la aplicación como una aplicación bajo un sitio de nivel raíz y mantener la URL base completa al realizar llamadas a la API.

Comments are closed.