c# - 在 ASP.NET 4.5 项目中使用 wwwroot 文件夹(ASP.NET Core 样式)

标签 c# asp.net-mvc owin

我非常喜欢新的 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 文件。这正是我要避免的事情。

有什么想法吗?

最佳答案

我相信我现在有一个可行的方法来做到这一点。进行了一些谷歌搜索和实验,但最后我想到了以下过程:

  1. 在 VS2015 中创建一个新的 ASP.NET 4.5 项目,选择空模板

  2. 通过 nuget 添加 OWIN 引用(Install-Package Microsoft.Owin.Host.SystemWebMicrosoft.Owin.StaticFiles)

  3. 添加一个类似这样的启动文件:

    [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);
            }
        }
    }
    
  4. 将以下内容添加到您的 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/

相关文章:

c# - 如何在文本框中显示选定的记录

c# - 值字段是必需的

asp.net-mvc - 用于 Web.config <appSettings> 的 T4MVC

c# - 结合 IdentityDbContext 和 TrackerContext

c# - Azure 事件目录 |基于角色的授权

c# - ExportAsFixedFormat 中的 NumberFormat 问题

c# - 在 LINQ group by procedure 之后访问 List<T> 中保存的对象属性

c# - 删除 cookie 名称中的 .AspNet 前缀

c# - 运行时找不到方法

asp.net-mvc - 在 MVC 中按固定时间表运行 Controller 方法?