如何在ASP.NET Core中使用静态文件
ASP.NET Core可以将静态文件(HTML文件,图像,JavaScript文件等)直接提供给客户端。 若要使ASP.NET Core可以提供静态文件,必须在应用程序中使用框架的“静态文件中间件”,并且必须指定必要的配置。 本文讨论了如何在ASP.NET Core中处理静态文件。
在Visual Studio中创建一个ASP.Net Core MVC项目
首先,让我们在Visual Studio 2019中创建一个ASP.Net Core项目。假设系统中安装了Visual Studio 2019,请按照下面概述的步骤在Visual Studio中创建一个新的ASP.Net Core项目。
- 启动Visual Studio IDE。
- 点击“创建新项目”。
- 在“创建新项目”窗口中,从显示的模板列表中选择“ ASP.NET Core Web应用程序”。
- 点击下一步。
- 在“配置新项目”窗口中,指定新项目的名称和位置。 (可选)选中“将解决方案和项目放在同一目录中”复选框。
- 单击创建。
- 在接下来显示的“创建新的ASP.NET Core Web应用程序”窗口中,从顶部的下拉列表中选择.NET Core作为运行时,并选择ASP.NET Core 2.2(或更高版本)。
- 选择“ Web应用程序(Model-View-Controller)”作为项目模板,以创建新的ASP.NET Core MVC应用程序。
- 确保未选中“启用Docker支持”和“配置HTTPS”复选框,因为我们此处将不再使用这些功能。
- 确保将身份验证设置为“无身份验证”,因为我们也不会使用身份验证。
- 单击创建。
遵循这些步骤应该会导致一个新的ASP.NET Core MVC项目准备就绪并在Visual Studio中等待。 在以下各节中,我们将使用该项目来处理ASP.NET Core MVC中的静态文件。
安装静态文件中间件NuGet软件包
既然我们已经在Visual Studio中创建了一个ASP.NET Core MVC应用程序,接下来应该做的就是安装必要的NuGet程序包。 您必须在请求管道中添加Microsoft.AspNetCore.StaticFiles中间件,以使ASP.NET Core可以提供静态内容。
您可以从Visual Studio 2019 IDE中的NuGet程序包管理器安装此程序包。 或者,您可以运行以下命令以通过.NET CLI安装此软件包。
dotnet add package Microsoft.AspNetCore.Rewrite
在ASP.NET Core中配置静态文件中间件
若要使ASP.NET Core MVC可以提供静态文件,必须配置静态文件中间件。 下面的代码片段说明了如何在Startup类中配置Static Files Middleware。
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
app.UseStaticFiles();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
endpoints.MapRazorPages();
});
}
在ASP.NET Core中提供静态文件
您会在wwwroot(content-root / wwwroot)文件夹中找到静态文件。 静态文件存储在名为css,images和js的文件夹中。 所有这些文件夹都位于wwwroot文件夹中,并使用相对路径进行访问。
如果您的项目中已经安装并配置了静态文件中间件,则可以使用以下URL访问名为test.png的图像:
http:// localhost:44399 / images / test.png
执行应用程序时,您可以看到Web浏览器中显示的图像。 注意Web浏览器中的URL。
现在想象一下,您将不得不提供驻留在wwwroot文件夹之外的静态文件。 假设有一个名为IDGStaticFiles的文件夹,其中包含test.png文件。 以下代码段说明了如何配置静态文件中间件以提供位于wwwroot文件夹之外的文件。
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
app.UseStaticFiles();
app.UseStaticFiles(new StaticFileOptions()
{
FileProvider = new PhysicalFileProvider(
Path.Combine(Directory.GetCurrentDirectory(),
@"IDGStaticFiles")),
RequestPath = new PathString("/StaticFiles")
});
}
在ASP.NET Core中启用目录浏览
目录浏览是Web应用程序中的一项功能,它使用户可以浏览指定目录中的文件和目录。 请注意,出于安全原因,默认情况下禁用此功能。 您可以通过使用Startup类的Configure方法中的UseDirectoryBrowser扩展方法在ASP.NET Core应用程序中启用目录浏览。
以下代码段说明了如何将启用目录浏览所需的服务添加到请求处理管道。
public void ConfigureServices(IServiceCollection services)
{
services.AddDirectoryBrowser();
}
接下来,在Startup类的Configure方法中编写以下代码以使用此中间件。
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
app.UseStaticFiles();
app.UseStaticFiles(new StaticFileOptions()
{
FileProvider = new PhysicalFileProvider(
Path.Combine(Directory.GetCurrentDirectory(),
@"wwwroot")),
RequestPath = new PathString("/IDGImages")
});
app.UseDirectoryBrowser(new DirectoryBrowserOptions()
{
FileProvider = new PhysicalFileProvider(
Path.Combine(Directory.GetCurrentDirectory(), @"wwwroot\images")),
RequestPath = new PathString("/IDGImages")
});
}
运行应用程序并在路径字符串中指定IDGImages时,您将能够看到wwwroot \ images文件夹的内容。
ASP.NET Core中的安全文件访问
由于默认情况下没有授权检查,因此如何保护对ASP.NET Core服务的文件的访问? 请注意,wwwroot文件夹中存在的文件是公开可用的。 为了保护这些文件,必须将这些文件移动到其他文件夹,即,移动到wwwroot文件夹之外的文件夹。 最后,要提供这些文件,您可以利用控制器类中的操作方法来返回FileResult实例。
在ASP.NET Core中提供默认页面
最后,您可以利用UseDefaultFiles扩展方法来提供默认页面。 这是在Startup类中配置此扩展方法的方法。
public void Configure(IApplicationBuilder app)
{
app.UseDefaultFiles();
app.UseStaticFiles();
}
UseFileServer扩展方法结合了UseStaticFiles,UseDefaultFiles和UseDirectoryBrowser扩展方法的功能。 如果您想使用UseFileServer扩展方法来利用这三种功能,则可以在Startup类的Configure方法中编写以下代码。
app.UseFileServer(enableDirectoryBrowsing: true);
From: https://www.infoworld.com/article/3446957/how-to-work-with-static-files-in-aspnet-core.html