La définition dynamique de la SPA source de chemin dans .Net De Base 3.1

0

La question

J'ai un .Net de Base 3.1 application que j'utilise une API mais il sert aussi de mon SPA (Angulaire). Comme récemment, je vais avoir quelques problèmes avec la SEO, donc je tiens à servir une version statique de mon Angulaire de l'application lorsque le robot Googlebot vient autour.

Est ici en quelque sorte à définir dynamiquement la SPA chemin de la source?

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

Actuellement, j'ai un petit middleware fichier où je détecter Googlebot basé sur le UserAgent de la chaîne. Je passe alors que par le biais de la demande.

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

Mais je ne peux pas accéder à la Demande de la méthode Configure() dans le Démarrage.cs fichier. Est-il de toute façon comment je peux faire ce travail? Je veux vraiment être en mesure de définir dynamiquement le chemin source.

Merci beaucoup!

Ce qui concerne

1

La meilleure réponse

-1

Vous pouvez essayer les codes suivants , en mettant le middleware dans Configurer()méthode .

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
 
            app.Use(async (context, next) =>
            {
                var userAgent = context.Request.Headers["User-Agent"];
                context.Items["isCrawler"] = userAgent.Contains("Googlebot");
                if ((bool)context.Items["isCrawler"])
                {
                    app.UseSpa(spa =>
                    {
                        spa.Options.SourcePath = "ClientApp";
                    });
                }
                else {
                    //do your stufff....
                }
                // Call the next delegate/middleware in the pipeline
                await next();
            });
     …}
2021-11-25 01:41:49

J'utilise le Middleware de la classe pour obtenir une prise de la Demande afin que je puisse déterminer le UserAgent. Je n'ai pas encore trouver comment définir l'app réglages du spa à l'intérieur d'un middleware de classe, qui permettrait de résoudre mon problème!
Schippert

Oui, vous avez raison . Je sais que vous avez utilisé le Middleware de la classe pour obtenir une prise de la Demande. Je veux dire que vous pouvez essayer de mettre middleware dans Configurer()méthode, comme dans l'exemple de code dans le document est utilisé pour démontrer la création d'un composant middleware. Ensuite, vous n'avez pas besoin de définir l'application réglages du spa à l'intérieur d'un middleware de classe. Bien sûr, le réglage de l'app réglages du spa à l'intérieur d'un middleware de classe en est une autre.
Qing Guo

Malheureusement je ne pouvais pas le faire fonctionner. Une fois que j'ai déplacer ce code à l'intérieur de la Middleware il se casse. Est-il possible comment je peux vérifier la demande lors de la transformation de la configuration de la méthode dans le Démarrage de classe?
Schippert

- Je modifier ma réponse, en espérant que cela peut vous aider.
Qing Guo

Oui! Il va dans la bonne direction! À l'aide conditionnelle middleware devrait faire l'affaire (App.UseWhen). MAIS il y a aussi quelque chose dans la ConfigureServices méthode qui consiste à définir le rootpath (AddSpaStaticFiles) qui est peut-être provoquant pourquoi il n'est pas encore de travail.
Schippert

A votre problème à été résolu?
Qing Guo

Dans d'autres langues

Cette page est dans d'autres langues

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................