【发布时间】:2015-12-20 17:39:51
【问题描述】:
我正在开发一个网站,我使用 ASP.NET 5 CLR (rc1-final x64)。 我想让我的 wwwroot 文件夹“干净”。我觉得应该在 wwwroot 中存在的所有内容都应该在构建时或通过任务添加(例如通过 Grunt)。我为此使用了 Grunt,它适用于 JavaScript 和 CSS 文件。
现在我正在向我的网站添加图片。现在我的 .gitignore 说要排除 wwwroot。我不知道如何将图像从 wwwroot 外部移动到其中。有什么好方法可以将文件移动到 wwwroot 吗?我真的希望我的 wwwroot '干净' 没有任何库。我在 wwwroot 之外有这些文件,所以我不会意外提供不需要的文件。
我想将它们从: [应用程序根目录]/static/img 到 wwwroot/img。
目前我有以下繁重的任务:
- grunt-contrib-concat
- grunt-contrib-cssmin
- grunt-contrib-uglify
我认为这可能非常低效,因为在构建时我们每次都需要移动所有文件。
有什么方法可以更好/更有效地做到这一点?
编辑#1:
是的,所以我阅读了文档:http://docs.asp.net/en/latest/fundamentals/static-files.html。
我实际上可以像这样将参数传递给app.UseStaticFiles() 方法:
app.UseStaticFiles(new StaticFileOptions
{
FileProvider = new PhysicalFileProvider(@"D:\Source\WebApplication1\src\WebApplication1\MyStaticFiles"),
RequestPath = new PathString("/StaticFiles")
});
这里的PhysicalFileProvider 包含绝对路径。这里可以使用相对路径吗?
编辑#2: 实际上这有效:
public void Configure(IApplicationBuilder app, IHostingEnvironment environment, ILoggerFactory loggerFactory, IApplicationEnvironment appEnvironment)
{
app.UseIISPlatformHandler();
app.UseDeveloperExceptionPage();
app.UseMvcWithDefaultRoute()
.UseStaticFiles()
.UseStaticFiles(new StaticFileOptions
{
FileProvider = new PhysicalFileProvider(string.Concat(appEnvironment.ApplicationBasePath,"/static/images")),
RequestPath = new PathString("/img")
});
}
这里我们添加了两次UseStaticFiles 中间件以提供默认值,即 wwwroot。我们还将在图像所在的解决方案中提供文件。
但是,不知道两次添加这个中间件会不会出现性能或安全问题或其他问题。您需要小心添加到此文件夹中的内容。至少应该不启用目录浏览。
【问题讨论】:
-
只是好奇,为什么 wwwroot 不是源代码控制的,为什么不将图像放在 wwwroot 中?这些图片是静态的还是动态的(如产品图片等)?
-
那是因为我在 wwwroot 中有合并和缩小的文件(CSS 和 JavaScript)。我将所有源文件保存在 wwwroot 之外。是的,这些图片是静态的。
-
我们的场景和你一样。我们的 wwwroot 中有我们的组合和 ugly 样式表和脚本,但我们从不提交缩小和连接的脚本。有一个适当的限制,这样开发人员就不会意外地提交它们。脚本在构建服务器上被缩小和连接。优化图像也是如此。这对我们来说已经足够“干净”了。我并不是说这是推荐的方法。我要说的是,当存在简单的解决方案时,有时我们往往会使事情过于复杂。
-
好的。有什么限制?它在单片机中吗?你的静态图像在哪里?此外,我在问题的编辑 (2) 中添加了一个可能的解决方案。
标签: asp.net asp.net-core