我非常喜欢新的 asp.net (asp.net 5\core 1.0) web 应用程序的方法,其中 wwwroot 文件夹是根文件夹,并且只提供其中的静态文件。
可以通过路由或其他配置让 wwwroot 文件夹在 asp.net 4.5 项目中以类似的方式运行,这样静态文件只从中提供,并且它是静态 webapp 的“根”文件?
(我提出这个问题的部分动机是我在 VS2015 的 asp.net 5 项目中托管了一个角度应用程序,但我需要将其移至 asp.net 4.5 项目中,但我想保留现有的磁盘结构)
尝试使用 OWIN
我尝试使用一个空的 ASP.NET 4.5 Web 应用程序项目和 OWIN 进行此操作。所以我的文件夹结构有我的角度应用程序,在项目文件夹的 wwwroot 文件夹中有一个主要的 index.html 文件。项目的根目录中没有 HTML 文件。
我已经通过 nuget 和以下启动文件添加了 OWIN:
[assembly: OwinStartup(typeof(MyApp.UI.Startup))]
namespace MyApp.UI
{
public class Startup
{
public void Configuration(IAppBuilder app)
{
string root = AppDomain.CurrentDomain.BaseDirectory;
var physicalFileSystem = new PhysicalFileSystem(Path.Combine(root, "wwwroot"));
var options = new FileServerOptions
{
EnableDefaultFiles = true,
FileSystem = physicalFileSystem
};
options.StaticFileOptions.FileSystem = physicalFileSystem;
options.StaticFileOptions.ServeUnknownFileTypes = false;
options.DefaultFilesOptions.DefaultFileNames = new[] {"index.html"};
app.UseFileServer(options);
}
}
}
虽然这失败了——当我运行它时我的 index.html 文件的源代码确实加载了,但是它引用的所有 css、js 等文件都失败并返回 404。更糟糕的是,如果我将 gulpfile.js 附加到root url 它从项目文件夹的根目录加载我的 gulp 文件。这正是我要避免的事情。
有什么想法吗?
最佳答案
我相信我现在有一个可行的方法来做到这一点。进行了一些谷歌搜索和实验,但最后我想到了以下过程:
在 VS2015 中创建一个新的 ASP.NET 4.5 项目,选择空模板
通过 nuget 添加 OWIN 引用(
Install-Package Microsoft.Owin.Host.SystemWeb
和Microsoft.Owin.StaticFiles
)添加一个类似这样的启动文件:
[assembly: OwinStartup(typeof(MyApp.Startup))] namespace MyApp.UI { public class Startup { public void Configuration(IAppBuilder app) { string root = AppDomain.CurrentDomain.BaseDirectory; var physicalFileSystem = new PhysicalFileSystem(Path.Combine(root, "wwwroot")); var options = new FileServerOptions { RequestPath = PathString.Empty, EnableDefaultFiles = true, FileSystem = physicalFileSystem }; options.StaticFileOptions.FileSystem = physicalFileSystem; options.StaticFileOptions.ServeUnknownFileTypes = false; app.UseFileServer(options); } } }
将以下内容添加到您的 web.config 文件,以防止 IIS 提供您不希望它提供的静态文件,并强制所有内容通过 OWIN 管道:
<system.webServer> <handlers> <remove name="StaticFile"/> <add name="Owin" verb="" path="*" type="Microsoft.Owin.Host.SystemWeb.OwinHttpHandler, Microsoft.Owin.Host.SystemWeb"/> </handlers> </system.webServer>
我总是乐于接受有关如何执行此操作的更好建议,但这至少似乎对我有用。
关于c# - 在 ASP.NET 4.5 项目中使用 wwwroot 文件夹(ASP.NET Core 样式),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36294188/