共计 2609 个字符,预计需要花费 7 分钟才能阅读完成。
ASP.NET Core 反对间接向客户端提供动态文件,比方:Html 文件,图片,js 文件,为了可能让 ASP.NET Core 解决动态文件,须要应用 动态文件中间件
并做一些必要配置就能够了,这篇文章咱们就来一起探讨下。
装置 动态文件中间件
要想装置 动态文件中间件, 必须将 Microsoft.AspNetCore.StaticFiles
增加到 ASP.NET Core 的申请管道中,能够应用 Visual Studio 2019 中的 NuGet package manager
可视化界面,要么用 NuGet package manager console
在命令行窗口中键入如下命令。
dotnet add package Microsoft.AspNetCore.Rewrite
根底信息配置
上面的代码展现了在 Startup 中如何对 动态文件中间件 进行配置。
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
文件夹下, 能够看到 wwwroot
文件夹下还有 css
,images
,js
等文件夹,值得注意的是这些文件夹之间能够采纳相对路径进行拜访。
如果 动态文件中间件
曾经胜利配置好,接下来能够应用上面的门路拜访 test.png
图片。
http://localhost:44399/images/test.png
如果大家心理细腻的话就会发现,当我不想用 wwwroot
来承载这些动态文件的话,该怎么做呢?换句话说,我怎么去解决在 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")
});
}
启用 目录浏览
个别 web 程序中都会提供一个叫做 目录浏览
的性能,它容许用户浏览一个指定文件夹下的所有文件和文件夹,但通常为了平安思考,这个性能默认都是敞开状态,如果你有开启的需要,能够应用 UseDirectoryBrowser
扩大办法在 Configure 下进行配置,上面的代码片段展现了如何开启 目录浏览
。
public class Startup
{public Startup(IConfiguration configuration)
{Configuration = configuration;}
public IConfiguration Configuration {get;}
// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{services.AddDirectoryBrowser();
}
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")
});
}
}
而后把程序跑起来并在 url 中指定 IDGImages
门路,你将会看到 wwwroot\images
文件夹下的所有内容。
爱护文件平安
从后面的例子中能够看到,wwwroot 中的这些文件都是公开可拜访的,但很多时候想在某些文件上做一些受权解决,如果要这么做的话,有两种形式能够实现。
- 将须要爱护的文件从 wwwroot 移到独自的文件夹中。
- 利用 Action 来解决文件,并返回 FileResult 的形式。
解决默认页面
最初,你能够利用 UseDefaultFiles
扩大办法来提供一个 web 程序的 默认页面,上面的代码配置展现了如何配置。
public void Configure(IApplicationBuilder app)
{app.UseDefaultFiles();
app.UseStaticFiles();}
值得注意的是,如果你的 web 程序中须要有 动态文件
, 默认文件
, 目录浏览
三项性能的话,能够间接应用 UseFileServer
扩大办法,上面的代码片段展现了如何在 Configure 办法中进行配置。
app.UseFileServer(enableDirectoryBrowsing: true);
译文链接:https://www.infoworld.com/art…