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.

Estableciendo dinámicamente la ruta de origen de SPA en .Net Core 3.1

Tengo una aplicación .Net Core 3.1 que utilizo como API, pero también como mi SPA (Angular). Recientemente he tenido algunos problemas con el SEO y me gustaría servir una versión estática de mi aplicación Angular cuando Googlebot esté alrededor.

¿Existe alguna forma de establecer dinámicamente la ruta de origen del SPA?

app.UseStaticFiles();
app.UseSpaStaticFiles();
app.UseSpa(spa =>
{
spa.Options.SourcePath = "ClientApp";
});

Actualmente tengo un pequeño archivo de middleware donde detecto Googlebot basándome en la cadena UserAgent. Luego paso eso a través de la solicitud.

Pero no puedo acceder a la solicitud en el método Configure() en el archivo Startup.cs. ¿Hay alguna manera de hacer que esto funcione? Realmente quiero poder establecer dinámicamente la SourcePath.

¡Muchas gracias!

Saludos

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Como experto en tecnología de la información especializado en c#, asp.net-core, single-page-application y .net-core-3.1, puedo sugerir una solución para el problema al que te enfrentas al servir una versión estática de tu aplicación de Angular cuando Googlebot rastrea tu sitio web.

    Puedes intentar establecer dinámicamente la ruta de origen utilizando el siguiente código en tu archivo middleware:

    public async Task InvokeAsync(HttpContext context)
    {
        var userAgent = context.Request.Headers["User-Agent"];
        var isCrawler = userAgent.Contains("Googlebot");
        if (isCrawler)
        {
            context.Items["isCrawler"] = true;
            context.Items["SourcePath"] = "StaticClientApp";
        }
        await _next(context);
    }
    

    Aquí, estás verificando el agente de usuario para ver si es Googlebot y configurando una bandera y una ruta de origen en consecuencia.

    A continuación, en tu archivo Startup.cs, puedes modificar el código app.UseSpa para establecer dinámicamente la ruta de origen en función de la bandera establecida en el middleware:

    app.UseSpa(spa =>
    {
        if (context.Items.ContainsKey("isCrawler") && (bool)context.Items["isCrawler"])
        {
           spa.Options.SourcePath = "StaticClientApp";
        }
        else
        {
           spa.Options.SourcePath = "ClientApp";
        }
    });
    

    Este código verifica la bandera “isCrawler” y establece la ruta de origen en “StaticClientApp” si es verdadera, de lo contrario la establece en “ClientApp”.

    Con esta solución, aún puedes utilizar tu middleware existente para detectar Googlebot y servir de forma dinámica la versión estática de tu SPA de Angular.

Comments are closed.