gpt4 book ai didi

asp.net-mvc - 项目子目录作为静态文件的根目录

转载 作者:行者123 更新时间:2023-12-04 01:00:21 24 4
gpt4 key购买 nike

作为 ASP.NET MVC 的新手,我正在使用 Visual Studio 2013 向导创建一个 Web 应用程序。它从提供静态文件的位置创建几个文件夹:Content , Scripts , 等等。

其他语言的框架(例如 TurboGears)有一个仅用于静态内容的显式目录,消除了提供页面源代码而不是处理它的风险,这是 PHP 站点的典型配置错误。

然而,ASP.NET 很乐意在应用程序的根目录中提供任何内容,例如http://localhost:1740/Project_Readme.html只要它有正确的扩展名。只有Views文件夹受 Web.config 保护.

如何将应用程序配置为使用除项目根目录之外的另一个目录来存放静态文件。例如。如果文件 favicon.ico放入子目录Content ,它应该可以作为 http://localhost:1740/favicon.ico 访问,但除了 Content 之外什么都没有目录,除非由 Controller 返回。

在此目录下不应执行任何操作,即,如果将 *.cshtml 文件放入此目录,则文件内容(源代码)应以 text/plain 的形式交付。 .

最终应用程序将使用 mod_mono 运行在 Linux 上。

最佳答案

更新:

本,

建议的解决方案仅适用于 Owin。要使其在 MVC 应用程序中工作,您必须仅使用 asp.net MVC 6(asp.net core 或 asp.net 5 的一部分)。但是,通过 Web API,您也可以使用旧版本。要设置应用程序,请使用以下步骤:

  • 使用 Visual Studio 模板创建一个空项目(不要选择 Web API 或 MVC)
  • 将以下 Nuget 包添加到项目中:

    微软.AspNet.WebApi

    微软.AspNet.WebApi.Owin

    Microsoft.Owin.Host.SystemWeb

    Microsoft.Owin.StaticFiles
  • 添加一个 Startup.cs 文件并使用以下内容装饰命名空间

  • [程序集:OwinStartup(typeof(Startup))]
  • 将以下代码添加到 Stratup.cs 类
    public void Configuration(IAppBuilder app)
    {
    var config = new HttpConfiguration();
    config.MapHttpAttributeRoutes();
    config.Routes.MapHttpRoute(
    name: "DefaultApi",
    routeTemplate: "api/{controller}/{id}",
    defaults: new {id = RouteParameter.Optional}
    );
    //Configure the file/ static file serving middleware
    var physicalFileSystem = new PhysicalFileSystem(@".\client");
    var fileServerOptions = new FileServerOptions
    {
    EnableDefaultFiles = true,
    RequestPath = PathString.Empty,
    FileSystem = physicalFileSystem
    };

    fileServerOptions.DefaultFilesOptions.DefaultFileNames = new[] {"index.html"};
    fileServerOptions.StaticFileOptions.ServeUnknownFileTypes = true;
    fileServerOptions.StaticFileOptions.FileSystem = physicalFileSystem;
    app.UseFileServer(fileServerOptions);
    app.UseWebApi(config);
    }
  • 这应该会变魔术。现在您可以在 IIS 中托管应用程序。 IIS 将仅从客户端文件夹提供静态 Assets 。添加服务器文件夹并添加 Controller 。

  • Microsoft.Owin.Host.SystemWeb 有助于在 IIS 中托管 Owin 应用程序。文件服务选项帮助 IIS 仅从客户端文件夹提供静态文件。

    如果您有任何问题,请告诉我。

    根据您的问题,您要实现的项目结构应如下所示。

    Project Structure

    基本上你只有两个文件夹,客户端和服务器。静态文件仅从客户端文件夹提供。服务器文件夹不可访问。如果这是您所需要的,那么可以使用带有静态文件服务中间件的 Owin Self Host 轻松实现。

    自主机无需任何对 IIS 的依赖即可工作。但是,如果您计划在 Linux 上托管此应用程序,则可以使用 Asp.NET CORE 1.0。稍后,如果您决定在 Windows 内的 IIS 上托管应用程序,可以通过添加 Microsot.Owin.Host.SystemWeb nuget 包轻松实现。

    关于这个主题有很多很棒的博客文章。这是 link对于其中之一。这是 link用于在 Asp.NET Core 中实现相同的功能。

    我希望这能解决您的问题,如果您有任何问题,请告诉我。

    谢谢,
    索玛。

    关于asp.net-mvc - 项目子目录作为静态文件的根目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25669175/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com