gpt4 book ai didi

c# - 如果 UseSpaStaticFiles() 应该服务于 Angular 页面,为什么仍然需要 UseSpa()?

转载 作者:行者123 更新时间:2023-12-05 03:44:39 25 4
gpt4 key购买 nike

我在这里阅读了一些文章/博客帖子和问题,但我仍然对 ASP.NET Core 2.1 中 UseSpaStaticFiles()UseSpa() 中间件的用法感到困惑.(引用: What is the difference between UseStaticFiles, UseSpaStaticFiles, and UseSpa in ASP.NET Core 2.1? https://blog.steadycoding.com/usedefaultfiles-usestaticfiles-usespastaticfiles-usespa/ )

我在 ASP.NET Core 2.1 中使用 Angular 项目模板,它带有一组预定义的中间件,添加到 Startup.cs 文件中的管道:

public void ConfigureServices(IServiceCollection services)
{
services.AddSpaStaticFiles(configuration =>
{
configuration.RootPath = "ClientApp/dist";
});
}

public void Configure(IApplicationBuilder app)
{

app.UseStaticFiles();
app.UseSpaStaticFiles();


app.UseSpa(spa =>
{
if (env.IsDevelopment())
{
spa.UseProxyToSpaDevelopmentServer("http://localhost:4000");
}
});

}

我的困惑如下:Angular 项目是外部编译的,编译后的 js 文件位于 ClientApp/dist 文件夹中,环境也设置为生产环境,所以我假设 UseSpaStaticFiles() 将为 Angular 页面提供服务,因为 ClientApp/dist 文件夹具有相应的内容。此外,UseSpa() 中间件在这种情况下毫无用处,因此我可以删除它。

但是,如果 UseSpa() 被移除,则 Angular 页面根本不会加载,尽管 UseSpaStaticFiles() 应该基于页面提供服务在 ClientApp/dist 的内容上。 (如果 UseSpaStaticFiles()UseSpa() 都添加到中间件管道,则 Angular 页面从 ClientApp/dist 文件夹成功提供这意味着 UseSpaStaticFiles() 为它服务。)

如果环境设置为生产环境,则根本不配置 UseSpa(),它只是添加到中间件管道中。

你能帮我澄清一下为什么 UseSpaStaticFiles() 不能在没有 UseSpa() 的情况下提供页面吗?为什么 UseSpa() 应该总是被添加到管道中,即使它不提供任何服务?我是否遗漏了导致此行为的配置中的某些内容?

最佳答案

UseSpa 本质上是一个包罗万象的路由处理程序,它将所有以前未处理的路由转发到您的单页应用程序。这样,您的 SPA 就可以执行客户端路由之类的操作,而您的服务器应用程序不必知道客户端应用程序可以理解的所有路由。

相比之下,UseSpaStaticFiles 是一个静态文件处理程序,它只提供已编译的应用程序文件,例如应用程序包,如 app.jsvendor.js,在它们各自的名称下,就像 UseStaticFiles 适用于 wwwroot 中的静态文件 文件夹。

关于c# - 如果 UseSpaStaticFiles() 应该服务于 Angular 页面,为什么仍然需要 UseSpa()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66357359/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com