• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >ASP.NET > 解析如何利用一个ASP.NET Core应用来发布静态文件

解析如何利用一个ASP.NET Core应用来发布静态文件

作者:Artech 字体:[增加 减小] 来源:互联网 时间:2017-05-11

Artech通过本文主要向大家介绍了pro asp.net core mvc,asp core h5,asp core area,asp生成静态html,asp伪静态等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

虽然ASP.NET Core是一款“动态”的Web服务端框架,但是在很多情况下都需要处理针对静态文件的请求,最为常见的就是这对JavaScript脚本文件、CSS样式文件和图片文件的请求。针对不同格式的静态文件请求的处理,ASP.NET Core为我们提供了三个中间件,它们将是本系列文章论述的重点。不过在针对对它们展开介绍之前,我们照理通过一些简单的实例来体验一下如何在一个ASP.NET Core应用中发布静态文件。

目录

一、以Web的形式读取文件

二、浏览目录内容

三、显示默认页面

四、映射媒体类型

一、以Web的形式读取文件

我们创建的演示实例是一个简单的ASP.NET Core控制台应用,它具有如下图所示的项目结构。我们可以看到在默认作为WebRoot的目录(wwwroot)下,我们将JavaScript脚本文件、CSS样式文件和图片文件存放到对应的子目录(js、css和img)下,我们将把这个目录的所有文件以Web的形式发布出来,客户端可以访问相应的URL来获取这些文件。

针对静态文件的请求是通过一个名为StaticFileMiddleware的中间件来实现的,这个中间件类型定义在NuGet包“Microsoft.AspNetCore.StaticFiles”中,所以我们需要预先按照这个NuGet包。整个应用只包含如下所示的这几行代码,StaticFileMiddleware这个中间件的注册是通过调用ApplicationBuilder的扩展方法UseStaticFiles来完成的。

  public class Program
  {
   public static void Main()
    {
     new WebHostBuilder()
        .UseContentRoot(Directory.GetCurrentDirectory())
        .UseKestrel()
       .Configure(app => app.UseStaticFiles())
        .Build()
       .Run();
    }
  }
</div>

除了注册必需的StaticFileMiddleware中间件之外,我们还调用了WebHostBuilder的UseContentRoot方法将当前项目的根目录作为ContentRoot目录。我们知道ASP.NET Core应用具有两个重要的根目录,它们分别是ContentRoot和WebRoot,后者也是对外发布的静态文件默认使用的根目录。由于WebRoot目录的默认路径就是“{contentroot}/wwwroot”,所示上面这段程序就是将项目中的这个wwwroot目录下的所有静态文件发布出来。

当这个程序运行之后,我们就可以通过向对应URL发送HTTP请求的方式来获取某个的文件,这个URL由文件相当于wwwroot目录的路径来决定。比如JPG文件“~/wwwroot/img/dophin1.jpg”对应的URL为“http://

localhost:5000/img/dophin1.jpg”。我们直接利用浏览器访问这个URL,目标图片会直接显示出来。

上面我们通过一个简单的实例将WebRoot所在目录下的所有静态文件直接发布出来。如果我们需要发布的静态文件存储在其他目录下呢?依旧是演示的这个应用,现在我们将一些文档存储在如下图所示的“~/doc/”目录下并以Web的形式发布出来,我们的程序又该如何编写呢?

我们知道ASP.NET Core应用大部分情况下都是利用一个FileProvider对象来读取文件的,它在处理针对静态文件的请求是也不例外。对于我们调用ApplicationBuilder的扩展方法UseStaticFiles方法注册的这个类型为StaticFileMiddleware的中间件,其内部具有一个FileProvider和请求路径的映射关系。如果调用UseStaticFiles方法没有指定任何的参数,那么这个映射关系的请求路径就是应用的基地址(PathBase),而FileProvider自然就是指向WebRoot目录的PhysicalFileProvider。

上述的这个需求可以通过显式注册这个映射的方式来实现,为此我们在现有程序的基础上额外添加了一次针对UseStaticFiles方法的调用,并通过指定的参数(是一个StaticFileOptions对象)显式指定了采用的FileProvider(针对“~/doc/”的PhysicalFileProvider)和请求路径(“/documents”)。

  public class Program
  {
    public static void Main()
    {
     string contentRoot = Directory.GetCurrentDirectory();
      new WebHostBuilder()
        .UseContentRoot(contentRoot)
        .UseKestrel()
       .Configure(app => app
         .UseStaticFiles()
         .UseStaticFiles(new StaticFileOptions {
            FileProvider = new PhysicalFileProvider(Path.Combine(contentRoot, "doc")),
            RequestPath = "/documents"
           }))
        .Build()
       .Run();
    }
  }
</div>

按照上面这段程序指定的映射关系,对于存储在“~/doc/”目录下的这个PDF文件(“checklist.pdf”),发布在Web上的URL为“http://localhost:5000/documents/checklist.pdf”。当我们在浏览器上请求这个地址时,该PDF文件的内容将会按照如下图所示的形式显示在浏览器上。

二、浏览目录内容

注册的StaticFileMiddleware中间件只会处理针对某个具体静态文件的额请求,如果我们向针对某个目录的URL发送HTTP请求(比如“http://localhost:5000/img/”),得到的将是一个状态为404的响应。不过我们可以通过注册另一个名为DirectoryBrowserMiddleware的中间件来显示请求目录的内容。具体来说,这个中间件会返回一个HTML页面,请求目录下的所有文件将以表格的形式包含在这个页面中。对于我们演示的这个应用来说,我们可以按照如下的方式调用UseDirectoryBrowser方法来注册这个DirectoryBrowserMiddleware中间件。

  public class Program
  {
   public static void Main()
    {
      string contentRoot = Directory.GetCurrentDirectory();
      IFileProvider fileProvider = new PhysicalFileProvider(
        Path.Combine(contentRoot, "doc"));
      new WebHostBuilder()
       .UseContentRoot(contentRoot)
       .UseKestrel()
       .Configure(app => app
         .UseStaticFiles()
         .UseStaticFiles(new StaticFileOptions {
           FileProvider = fileProvider,
           RequestPath = "/documents"
          })
         .UseDirectoryBrowser()
         .UseDirectoryBrowser(new DirectoryBrowserOptions {
             FileProvider = fileProvider,
             RequestPath = "/documents"
         }))
       .Build()
       .Run();
    }
  }
</div>

当上面这个应用启动之后,如果我们利用浏览器向针对某个目录的URL(比如“http://localhost:5000/”或者“http://localhost:5000/img/”),目标目录的内容(包括子目录和文件)将会以下图所示的形式显示在一个表格中。不仅仅如此,子目录和文件均会显示为链接,指向目标目录或者文件的URL。

三、显示默认页面

从安全的角度来讲,利用注册的UseDirectoryBrowser中间件显示一个目录浏览页面会将整个目标目录的接口和所有文件全部暴露出来,所以这个中间件需要根据自身的安全策略谨慎使用。对于针对目录的请求,另一种更为常用的响应策略就是显示一个保存在这个目录下的默认页面。按照约定,作为默认页面的文件一般采用如下四种命名方式:default.htm、default.html、index.htm或者index.html。针对目标目录下默认页面的呈现实现在一个名为DefaultFilesMiddleware的中间件中,我们演示的这个应用可以按照如下的方式调用UseDefaultFiles方法来注册这个中间件。

  public class Program
  {
    public static void Main()
    {
      string contentRoot = Directory.GetCurrentDirectory();
      IFileProvider fileProvider = new PhysicalFileProvider(Path.Combine(contentRoot, "doc")); 
      new WebHostBuilder()
        .UseContentRoot(contentRoot)
        .UseKestrel()
        .Configure(app => app
          .UseDefaultFiles()
          .UseDefaultFiles(new DefaultFilesOptions{
            RequestPath = "/documents",
            FileProvider = fileProvider,
          })
          .UseStaticFiles()
         .UseStaticFiles(new StaticFileOptions
          {
            FileProvider = fileProvider,
            RequestPath = "/documents"
          })
          .UseDirectoryBrowser()
          .UseDirectoryBrowser(new DirectoryBrowserOptions
          {
           Fil



 
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • ASP.NET Core发送邮件的方法
  • 在ASP.NET Core 中发送邮件的实现方法(必看篇)
  • Asp.net core WebApi 使用Swagger生成帮助页实例
  • ASP.NET core Web中使用appsettings.json配置文件的方法
  • ASP.NET Core部署前期准备 使用Hyper-V安装Ubuntu Server 16.10
  • ASP.NET Core应用中与第三方IoC/DI框架的整合
  • ASP.NET Core程序发布到Linux生产环境详解
  • 详解ASP.NET Core 网站发布到Linux服务器
  • ASP.NET Core全面扫盲贴
  • 基于ASP.NET Core数据保护生成验证token示例

相关文章

  • 2017-05-11asp.net使用母版页中使用ajax脚本取数据
  • 2017-05-11VS2005 水晶报表在时部署时遇到的问题
  • 2017-05-11使用DataTable更新数据库(增,删,改)
  • 2017-05-11form身份验证通过后,只能用FormsAuthentication.RedirectFromLoginPage
  • 2018-08-20asp.net实现的群发邮件功能详解
  • 2017-05-11ASP.NET中的跳转 200, 301, 302转向实现代码
  • 2017-05-11代码实现打印功能(asp.net+javascript)
  • 2017-05-11在ASP.NET 2.0中操作数据之四:使用ObjectDataSource展现数据
  • 2017-05-11ASP.NET中Cookie状态的说明与用法
  • 2017-05-11asp.net下经典数据库记录分页代码

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • asp.net中利用ashx实现图片防盗链代码
    • .NET 数据库连接池
    • asp.net 专业源代码打包工具
    • ASP.net连接Excel的代码
    • 使用Asp.net Mvc3 Razor视图方式扩展JQuery UI Widgets方法介绍
    • asp.net Cookie值中文乱码问题解决方法
    • ASP.NET编程获取网站根目录方法小结
    • .net客户端导出Excel实现代码及注意事项
    • mvc form表单提交的几种形式整理总结
    • asp.net datalist绑定数据后可以上移下移实现示例

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有