[ASP.NET Core] Static File Middleware

来源:http://www.cnblogs.com/clark159/archive/2016/10/21/5984152.html
-Advertisement-
Play Games

前言 本篇文章介紹ASP.NET Core里,用來處理靜態檔案的Middleware,為自己留個紀錄也希望能幫助到有需要的開發人員。 ASP.NET Core官網 前言 本篇文章介紹ASP.NET Core里,用來處理靜態檔案的Middleware,為自己留個紀錄也希望能幫助到有需要的開發人員。 A ...


前言

本篇文章介紹ASP.NET Core里,用來處理靜態檔案的Middleware,為自己留個紀錄也希望能幫助到有需要的開發人員。

結構

  • 一個Web站臺最基本的功能,就是在接收到從「瀏覽器傳入」的HTTP Request封包後,將站臺內所提供的靜態檔案(Static File),封裝成為「伺服器回傳」的HTTP Response封包內容,來提供給瀏覽器使用。

    結構01

  • 在ASP.NET Core里,內建了一個Middleware:StaticFileMiddleware,用來建立Web站臺提供靜態檔案的功能。這個Middleware會先剖析HTTP Request封包中的URL路徑、然後依照URL路徑計算並取得對應的File路徑下的檔案內容、接著再將該檔案內容封裝為HTTP Response封包內容,用來提供給瀏覽器使用。

    結構02

  • 而在StaticFileMiddleware里,定義URL根路徑、File根路徑這兩個系統參數,來映像URL路徑所對應的File路徑。用以提供開發人員,靈活的去設定URL路徑與File路徑之間的關係。

    開發01

    開發02

開發

Microsoft.AspNetCore.StaticFiles

在ASP.NET Core里,要加入StaticFileMiddleware來提供靜態檔案功能。開發人員可以先依照[ASP.NET Core] Getting Started這篇文章里的步驟,來建立相關環境與基本程式代碼。接著在project.json里掛載「Microsoft.AspNetCore.StaticFiles」的參考,後續就能使用這個參考里,所提供的StaticFileMiddleware相關對象。

{
  "version": "1.0.0-*",
  "buildOptions": {
    "debugType": "portable",
    "emitEntryPoint": true
  },
  "dependencies": {},
  "frameworks": {
    "netcoreapp1.0": {
      "dependencies": {
        "Microsoft.NETCore.App": {
          "type": "platform",
          "version": "1.0.0"
        },
        "Microsoft.AspNetCore.StaticFiles": "1.0.0",
        "Microsoft.AspNetCore.Server.Kestrel": "1.0.0"
      },
      "imports": "dnxcore50"
    }
  }
}

UseStaticFiles()

完成project.json的相關設定之後,就可以回過來修改「Program.cs」。在Microsoft.AspNetCore.StaticFiles里,提供了UseStaticFiles Extension,讓開發人員可以方便的掛載StaticFileMiddleware。在下列的範常式序代碼里,示範如何透過UseStaticFiles來掛載StaticFileMiddleware。(在StaticFileMiddleware裡面,URL根路徑預設為:「http://<Url>」、File根路徑預設為:「file:\\<ContentRoot>\wwwroot」)。

開發01

開發02

using System;
using System.IO;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.FileProviders;

namespace aspnetcoreapp
{
    public class Program
    {
        public static void Main(string[] args)
        {
            // Build
            var host = new WebHostBuilder()

                // 設定Host內容的File根路徑
                .UseContentRoot(Directory.GetCurrentDirectory())

                // 設定啟動參數
                .UseStartup<Startup>()

                // 開啟Kestrel聆聽HTTP            
                .UseKestrel()

                // 設定聆聽的URL
                .UseUrls("http://localhost:5000")

                // 建立Host       
                .Build();

            // Run 
            try
            {
                // 啟動Host
                host.Start();

                // 等待關閉
                Console.WriteLine("Application started. Press any key to shut down.");
                Console.ReadKey();
            }
            finally
            {
                // 關閉Host
                host.Dispose();
            }
        }
    }

    public class Startup
    {
        // Methods
        public void Configure(IApplicationBuilder app)
        {            
            // 掛載StaticFilesMiddleware
            app.UseStaticFiles();
        }
    }
}

UseWebRoot(webRoot)

在StaticFileMiddleware裡面,File根路徑預設為:「file:\\<ContentRoot>\wwwroot」。如果要變更預設的File根路徑,開發人員可以使用ASP.NET Core所提供的UseWebRoot Extension來變更預設的File根路徑。在下列的範常式序代碼里,示範如何透過UseWebRoot來變更預設的File根路徑。(範例執行時掛載的StaticFileMiddleware,URL根路徑同樣為:「http://<Url>」、File根路徑變更為:「file:\\<CurrentDirectory>\aaa」)。

開發03

開發04

using System;
using System.IO;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.FileProviders;

namespace aspnetcoreapp
{
    public class Program
    {
        public static void Main(string[] args)
        {
            // Build
            var host = new WebHostBuilder()

                // 設定Web站臺的File根路徑
                .UseWebRoot(Directory.GetCurrentDirectory() + @"\aaa")

                // 設定Host內容的File根路徑
                .UseContentRoot(Directory.GetCurrentDirectory())

                // 設定啟動參數
                .UseStartup<Startup>()

                // 開啟Kestrel聆聽HTTP            
                .UseKestrel()

                // 設定聆聽的URL
                .UseUrls("http://localhost:5000")

                // 建立Host       
                .Build();

            // Run 
            try
            {
                // 啟動Host
                host.Start();

                // 等待關閉
                Console.WriteLine("Application started. Press any key to shut down.");
                Console.ReadKey();
            }
            finally
            {
                // 關閉Host
                host.Dispose();
            }
        }
    }

    public class Startup
    {
        // Methods
        public void Configure(IApplicationBuilder app)
        {
            // 掛載StaticFilesMiddleware
            app.UseStaticFiles();
        }
    }
}

UseStaticFiles(options)

除了使用預設參數掛載StaticFilesMiddleware之外,開發人員也可以使用自定義參數來掛載StaticFilesMiddleware。如果要使用自定義參數來掛載StaticFilesMiddleware,開發人員可以同樣使用UseStaticFiles Extension來使用自定義參數掛載StaticFilesMiddleware。在下列的範常式序代碼里,示範如何透過UseStaticFiles來掛載StaticFilesMiddleware,並且定義其URL根路徑與File根路徑。(範例執行時掛載的StaticFileMiddleware,URL根路徑變更為:「http://<Url>/bbb」、File根路徑變更為:「file:\\<CurrentDirectory>\ccc」)。

開發05

開發06

using System;
using System.IO;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.FileProviders;

namespace aspnetcoreapp
{
    public class Program
    {
        public static void Main(string[] args)
        {
            // Build
            var host = new WebHostBuilder()

                // 設定Host內容的File根路徑
                .UseContentRoot(Directory.GetCurrentDirectory())

                // 設定啟動參數
                .UseStartup<Startup>()

                // 開啟Kestrel聆聽HTTP            
                .UseKestrel()

                // 設定聆聽的URL
                .UseUrls("http://localhost:5000")

                // 建立Host       
                .Build();

            // Run 
            try
            {
                // 啟動Host
                host.Start();

                // 等待關閉
                Console.WriteLine("Application started. Press any key to shut down.");
                Console.ReadKey();
            }
            finally
            {
                // 關閉Host
                host.Dispose();
            }
        }
    }

    public class Startup
    {
        // Methods
        public void Configure(IApplicationBuilder app)
        {
            // 掛載StaticFilesMiddleware
            app.UseStaticFiles(new StaticFileOptions()
            {
                // 設定URL根路徑
                RequestPath = @"/bbb",

                // 設定File根目錄
                FileProvider = new PhysicalFileProvider(Directory.GetCurrentDirectory() + @"\ccc")
            });
        }
    }
}

參考


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一、前言 前不久因公司產品需要完成了線上升級功能,因為編程技術不精,不敢冒然採用Socket方法實現線上升級,所以使用比較方便穩妥的WCF方式 如果考慮併發能力的話還是Socket>WCF>Remoting,所以如果你是Socket專家的話這篇你就不用看了。 二、流程 本篇主要講述一個完整的升級思路 ...
  • 在.NET項目中,我們較多的使用到加密這個操作。因為在現代的項目中,對信息安全的要求越來越高,那麼多信息的加密就變得至關重要。現在提供幾種常用的加密/解密演算法。 1.用於文本和Base64編碼文本的互相轉換 和 Byte[]和Base64編碼文本的互相轉換: (1).將普通文本轉換成Base64編碼 ...
  • 上一章筆者對於WinForm開發過程用到的幾個知識點做了講解。筆者們可以以此為開端進行學習。而本章我們來講一個跟ORM思想有關的知識點。在講之前讓我們想一下關於JAVA的hibernate知識點。hibernate也是ORM框架。記得hibernate裡面有一個叫HQL。先不管HQL的好與壞。主要是 ...
  • 一、目標樣式 我們要實現上圖中的效果,需要如下的操作: 1.從工具欄上的”Smobiler Components”拖動一個Button控制項到窗體界面上 2.修改Button按鈕的屬性 a.Size屬性 設置控制項的寬度和高度,見下圖; b.BarcodeScanned事件代碼 3.Smobiler窗體 ...
  • 說到參數獲取,大家肯定會說,能玩出什麼花來呢! 今天我們就來說說,關於Request[“參數名”],你天天和他打交道的主! Long ago,一經理跟我說,今天你來開發一個註冊的頁面吧,註冊的實體類,都已經有啦!如下: 好啦,你可以開發了! 按照策劃稿,頁面樣式,腳本,都已經寫好了,接下來,需要提交 ...
  • 因為ComboxItem是Object對象,而控制項自身沒有Value屬性.所以,需要自定義一個類,用其對象來存儲Text,Value. public class ComboxItem { private string text; private string values; public strin ...
  • 以下內容全部為web版本的老模板風格下完成。 一、在編輯狀態的詳細視圖下列印報表。 有些時候,需要在編輯狀態下直接列印報表內容,官方預設是不允許這樣做的。用Reflector查看源碼,可以看到: 在這個方法中禁止了顯示按鈕的邏輯。 ShowInReportActionEnableModeDefaul ...
  • 首先還是簡單的介紹下webRTC吧: WebRTC,名稱源自網頁實時通信(Web Real-Time Communication)的縮寫,是一個支持網頁瀏覽器進行實時語音對話或視頻對話的技術,是谷歌2010年以6820萬美元收購Global IP Solutions公司而獲得的一項技術。2011年5 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...