Динамическая настройка пути к источнику SPA в .Net Core 3.1

0

Вопрос

У меня есть приложение .Net Core 3.1, которое я использую в качестве API, но оно также обслуживает мой SPA (угловой). С недавнего времени у меня возникли некоторые проблемы с SEO, поэтому я хотел бы обслуживать статическую версию моего углового приложения, когда появится Googlebot.

Есть ли здесь какой-либо способ динамически задать путь к источнику SPA?

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

В настоящее время у меня есть небольшой файл промежуточного программного обеспечения, в котором я обнаруживаю Googlebot на основе строки агента пользователя. Затем я передаю это через запрос.

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

Но я не могу получить доступ к запросу в методе Configure() в файле Startup.cs. В любом случае, есть ли способ, как я могу заставить это работать? Я действительно хочу иметь возможность динамически задавать путь к источнику.

Большое спасибо!

С уважением

1

Лучший ответ

-1

Вы можете попробовать следующие коды , поместив промежуточное программное обеспечение в метод Configure ().

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

Я использую класс промежуточного программного обеспечения, чтобы получить доступ к Запросу, чтобы определить агента пользователя. Я еще не нашел, как установить настройки приложения spa внутри класса промежуточного программного обеспечения, это решило бы мою проблему!
Schippert

Да, вы правы . Я знаю, что вы использовали класс промежуточного программного обеспечения, чтобы получить доступ к Запросу. Я имею в виду, что вы можете попробовать поместить промежуточное программное обеспечение в метод Configure (), например, пример кода в документе используется для демонстрации создания компонента промежуточного программного обеспечения. Тогда вам не нужно устанавливать настройки приложения spa внутри класса промежуточного программного обеспечения. Конечно, настройка параметров приложения spa внутри класса промежуточного программного обеспечения-это другой способ.
Qing Guo

К сожалению, я не смог заставить это работать. Как только я перемещаю этот код внутри промежуточного программного обеспечения, он ломается. Есть ли какой-либо способ проверить запрос при обработке метода Configure в классе запуска?
Schippert

Я редактирую свой ответ, надеясь, что он вам поможет.
Qing Guo

Да! Это идет в правильном направлении! Использование условного промежуточного программного обеспечения должно сделать свое дело (App.UseWhen). НО в методе ConfigureServices также есть что-то, что задает корневой путь (AddSpaStaticFiles), что, возможно, является причиной того, почему он еще не работает.
Schippert

Ваша проблема решена?
Qing Guo

На других языках

Эта страница на других языках

Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................