【问题标题】:Dynamically setting the SPA source path in .Net Core 3.1在.Net Core 3.1中动态设置SPA源路径
【发布时间】:2022-01-02 07:14:39
【问题描述】:

我有一个 .Net Core 3.1 应用程序,用作 API,但它也为我的 SPA (Angular) 服务。最近我在 SEO 方面遇到了一些问题,所以我想在 Googlebot 出现时提供我的 Angular 应用程序的静态版本。

这里有没有办法动态设置SPA源路径?

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

目前我有一个小的中间件文件,我根据 UserAgent 字符串检测 Googlebot。然后我通过请求传递它。

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

但我无法访问 Startup.cs 文件中 Configure() 方法中的请求。无论如何我怎么能做到这一点?我真的希望能够动态设置 SourcePath。

非常感谢!

问候

【问题讨论】:

    标签: c# asp.net-core single-page-application .net-core-3.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();
                });
         …}
    

    【讨论】:

    • 我使用中间件类来获取请求,以便确定用户代理。我还没有找到如何在中间件类中设置应用程序 spa 设置,这将解决我的问题!
    • 是的,你是对的。我知道您已经使用中间件类来获取请求。我的意思是你可以尝试将中间件放在Configure()方法中,就像文档中的示例代码用于演示创建中间件组件一样。然后,您无需在中间件类中设置应用程序 spa 设置。当然,在中间件类中设置 app spa 设置是另一种方式。
    • 遗憾的是我无法让它工作。一旦我将该代码移动到中间件中,它就会中断。在 Startup 类中处理 Configure 方法时,有什么方法可以检查请求吗?
    • 我编辑我的答案,希望它可以帮助你。
    • 是的!它正朝着正确的方向前进!使用条件中间件应该可以解决问题(App.UseWhen)。但是在 ConfigureServices 方法中还有一些东西正在设置根路径(AddSpaStaticFiles),这可能是导致它无法正常工作的原因。
    猜你喜欢
    • 1970-01-01
    • 2020-05-20
    • 1970-01-01
    • 2020-08-02
    • 1970-01-01
    • 2018-03-27
    • 2020-06-21
    • 1970-01-01
    • 2022-01-09
    相关资源
    最近更新 更多