我在这里阅读了一些文章/博客文章和问题,但我仍然对 的用法感到困惑UseSpaStaticFiles()
and UseSpa()
ASP.NET Core 2.1 中的中间件。
(参考:ASP.NET Core 2.1 中的 UseStaticFiles、UseSpaStaticFiles 和 UseSpa 之间有什么区别?
https://blog.steadycoding.com/usedefaultfiles-usestaticfiles-usespastaticfiles-usespa/)
我将 Angular 项目模板与 ASP.NET Core 2.1 一起使用,该模板附带了一组预定义的中间件,添加到了管道中Startup.cs
file:
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()
and UseSpa()
两者都添加到中间件管道中,Angular 页面已成功从ClientApp/dist
文件夹,这意味着UseSpaStaticFiles()
服务它。)
如果环境设置为生产环境,UseSpa()
根本没有配置,它只是添加到中间件管道中。
你能帮我解释一下为什么UseSpaStaticFiles()
如果没有,则无法提供页面UseSpa()
以及为什么UseSpa()
即使它不提供任何服务,也应该始终添加到管道中吗?我的配置中是否遗漏了导致此行为的某些内容?
The UseSpa
本质上是一个包罗万象的路由处理程序,它将所有以前未处理的路由转发到您的单页应用程序。这样,您的 SPA 就可以执行客户端路由之类的操作,而无需服务器应用程序知道客户端应用程序能够理解的所有路由。
相比之下,UseSpaStaticFiles
是一个静态文件处理程序,仅提供已编译的应用程序文件,例如应用程序包如app.js
or vendor.js
,在各自的名字下,就像UseStaticFiles
适用于静态文件wwwroot
folder.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)