ASP.NET Core 2.1 中的 UseStaticFiles、UseSpaStaticFiles 和 UseSpa 有什么区别?
What is the difference between UseStaticFiles, UseSpaStaticFiles, and UseSpa in ASP.NET Core 2.1?
ASP.NET Core 2.1.1为appBuilder提供了几个看似相关的扩展方法:
UseStaticFiles
来自 Microsoft.AspNetCore.StaticFiles
UseSpaStaticFiles
来自 Microsoft.AspNetCore.SpaServices.Extensions
UseSpa
来自 Microsoft.AspNetCore.SpaServices.Extensions
请帮我弄清楚他们的目的和彼此之间的关系?
此外,如果我 运行 这些方法的顺序不同,从服务器执行的角度来看有什么不同吗
例如
app.UseStaticFiles() -> app.UseSpaStaticFiles() -> app.UseSpa()
对
app.UseSpa() -> app.UseSpaStaticFiles() -> app.UseStaticFiles()
Static files, such as HTML, CSS, images, and JavaScript, are assets an
ASP.NET Core app serves directly to clients. Some configuration is
required to enable serving of these files.
UseStaticFiles - 在 Web 根目录(wwwroot 文件夹)中提供文件
UseSpaStaticFiles - 提供静态文件,如图像,css,资源中的 js
angular 应用的文件夹
UseSpa - 让 asp.net 核心知道您想要 运行 您的哪个目录
angular 应用程序,运行在生产模式下安装时的 dist 文件夹和
在开发模式下 运行 angular 应用程序的哪个命令
示例
services.AddSpaStaticFiles(configuration =>
{
configuration.RootPath = "ClientApp/dist";
});
app.UseSpa(spa =>
{
// To learn more about options for serving an Angular SPA from ASP.NET Core,
// see https://go.microsoft.com/fwlink/?linkid=864501
spa.Options.SourcePath = "ClientApp";
if (env.IsDevelopment())
{
spa.UseAngularCliServer(npmScript: "start");
}
});
- UseStaticFiles 提供来自 wwwroot 的文件,但它可以更改。
- UseSpaStaticFiles 做类似的事情,但它需要注册 ISpaStaticFileProvider。如果 app.ApplicationServices.GetService
() returns null,那么你会得到一个异常。
throw new InvalidOperationException($"To use {nameof(UseSpaStaticFiles)}, you must " +
$"first register an {nameof(ISpaStaticFileProvider)} in the service provider, typically " +
$"by calling services.{nameof(AddSpaStaticFiles)}.");
所以需要调用app.AddSpaStaticFiles()注册默认ISpaStaticFileProvider
- UseSpa 做两件事。将所有请求重写到默认页面并尝试配置静态文件服务。与 UseSpaStaticFiles 相反,它不会抛出异常,而只是返回到 wwwroot 文件夹。
实际上,UseSpaStaticFiles 和 UseSpa 都在内部调用相同的方法 UseSpaStaticFilesInternal,但第三个参数的值不同,即 allowFallbackOnServingWebRootFiles。这就是为什么 UseSpaStaticFiles 在没有注册 ISpaStaticFileProvider 时抛出异常的原因,它根本不允许回退到 wwwroot。
BTW 如果 UseSpa 在内部回落到 wwwroot 它调用旧的 app.UseStaticFiles(staticFileOptions) ;
github 来源的链接:
ASP.NET Core 2.1.1为appBuilder提供了几个看似相关的扩展方法:
UseStaticFiles
来自Microsoft.AspNetCore.StaticFiles
UseSpaStaticFiles
来自Microsoft.AspNetCore.SpaServices.Extensions
UseSpa
来自Microsoft.AspNetCore.SpaServices.Extensions
请帮我弄清楚他们的目的和彼此之间的关系?
此外,如果我 运行 这些方法的顺序不同,从服务器执行的角度来看有什么不同吗
例如
app.UseStaticFiles() -> app.UseSpaStaticFiles() -> app.UseSpa()
对
app.UseSpa() -> app.UseSpaStaticFiles() -> app.UseStaticFiles()
Static files, such as HTML, CSS, images, and JavaScript, are assets an ASP.NET Core app serves directly to clients. Some configuration is required to enable serving of these files.
UseStaticFiles - 在 Web 根目录(wwwroot 文件夹)中提供文件
UseSpaStaticFiles - 提供静态文件,如图像,css,资源中的 js angular 应用的文件夹
UseSpa - 让 asp.net 核心知道您想要 运行 您的哪个目录 angular 应用程序,运行在生产模式下安装时的 dist 文件夹和 在开发模式下 运行 angular 应用程序的哪个命令
示例
services.AddSpaStaticFiles(configuration =>
{
configuration.RootPath = "ClientApp/dist";
});
app.UseSpa(spa =>
{
// To learn more about options for serving an Angular SPA from ASP.NET Core,
// see https://go.microsoft.com/fwlink/?linkid=864501
spa.Options.SourcePath = "ClientApp";
if (env.IsDevelopment())
{
spa.UseAngularCliServer(npmScript: "start");
}
});
- UseStaticFiles 提供来自 wwwroot 的文件,但它可以更改。
- UseSpaStaticFiles 做类似的事情,但它需要注册 ISpaStaticFileProvider。如果 app.ApplicationServices.GetService
() returns null,那么你会得到一个异常。
throw new InvalidOperationException($"To use {nameof(UseSpaStaticFiles)}, you must " +
$"first register an {nameof(ISpaStaticFileProvider)} in the service provider, typically " +
$"by calling services.{nameof(AddSpaStaticFiles)}.");
所以需要调用app.AddSpaStaticFiles()注册默认ISpaStaticFileProvider
- UseSpa 做两件事。将所有请求重写到默认页面并尝试配置静态文件服务。与 UseSpaStaticFiles 相反,它不会抛出异常,而只是返回到 wwwroot 文件夹。
实际上,UseSpaStaticFiles 和 UseSpa 都在内部调用相同的方法 UseSpaStaticFilesInternal,但第三个参数的值不同,即 allowFallbackOnServingWebRootFiles。这就是为什么 UseSpaStaticFiles 在没有注册 ISpaStaticFileProvider 时抛出异常的原因,它根本不允许回退到 wwwroot。
BTW 如果 UseSpa 在内部回落到 wwwroot 它调用旧的 app.UseStaticFiles(staticFileOptions) ;
github 来源的链接: