坚果: - )
我安装了最新的ASP.NET Core(RC2)。
我希望能够创建一个*.sln
,其中包含多个*.csproj
:一个用于服务器端开发,一个用于客户端开发。
我们将它们分开的原因是我们可以选择将客户端*.csproj
提供给具有更好UI技能的外部开发人员,而无需了解服务器端代码。他们可以使用Visual Studio Code或其他轻量级IDE在客户端html / js上工作,而不需要Visual Studio参与。
在客户端*.csproj
中,我想从根目录为角度项目提供静态文件(html / js / css),而不是从 wwwroot提供目录,以便gulpfile.js相对路径等与没有Visual Studio的角度项目设置相同。
据我了解,规则现在是: *如果hosting.json文件存在,则使用hosting.json中的webroot设置。 *否则,请使用wwwroot。 *如果缺少,请使用root。 *请参阅:Effective Java Item 29: Consider typesafe heterogeneous containers
首先,检查我是否设置了静态页面路由。创建了一个wwwroot / index.html页面。田田!的工作原理。
现在,将目录重命名为app/
并更新hosting.json
以指向它。重新加载项目后,app/
文件夹更改了图标...好...运行...没有快乐。与它战斗一段时间。没有成功......
然后完全删除app/
文件夹和hosting.json
文件。最终肯定想扔东西......
我获取静态文件的唯一方法是调用该文件夹wwwroot
。我是否有hosting.json
文件。
这与以下文档相反:https://github.com/aspnet/Hosting/issues/450
还有其他人成功摆脱了wwwroot文件夹吗?如果是这样......怎么样?!?!?
谢谢!
答案 0 :(得分:1)
虽然可以打开ASP.NET核心应用程序的根目录来提供静态文件,但这不是一个好主意,因为一旦你这样做,就没有任何阻止某人从导航到project.json或根目录中的任何其他文件。
话虽如此,这里是你如何在wwwroot之外提供静态文件。
首先,创建一个返回IApplicationBuilder的静态类。在这里,您将定义可访问的物理路径以及该路径的可选URL重写(请参阅代码中的注释):
using System.IO;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting.Internal;
using Microsoft.Extensions.FileProviders;
public static class ApplicationBuilderExtensions
{
public static IApplicationBuilder UseRootResources(this IApplicationBuilder app, HostingEnvironment env)
{
//var path = Path.Combine(env.ContentRootPath); // WARNING - this opens up the root of the app
var path = Path.Combine(env.ContentRootPath, "static"); // this would allow for serving up contents in a physical path folder named 'static'
var provider = new PhysicalFileProvider(path);
var options = new StaticFileOptions();
// the below line re-writes the path name of the physical path, it can have the string value of anything you want to call it
options.RequestPath = ""; // in this example, an empty string will give the *appearance* of it being served up from the root
//options.RequestPath = "/static"; // this will use the URL path named static, but could be any made-up name you want
options.FileProvider = provider;
app.UseStaticFiles(options);
return app;
}
}
接下来,在Startup.cs中,从Configure方法调用该函数:
app.UseRootResources((HostingEnvironment)env);
现在您可以在wwwroot之外提供静态文件了!在HTML中引用静态文件将使用您在ApplicationBuilderExtensions类中设置的Options.RequestPath中定义的路径。假设您将RequestPath留给空字符串来模拟根,那么您可以调用它所在的资源(即使它真的存在于' static'文件夹中),这要归功于URL重写的神奇之处:
<img src="bus.jpg"/>