欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

ASP.NET?Core中的靜態(tài)文件

 更新時(shí)間:2022年04月06日 14:54:38   作者:暗斷腸  
這篇文章介紹了ASP.NET?Core中的靜態(tài)文件,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

1.前言

當(dāng)我們創(chuàng)建Core項(xiàng)目的時(shí)候,Web根目錄下會(huì)有個(gè)wwwroot文件目錄,wwwroot文件目錄里面默認(rèn)有HTML、CSS、IMG、JavaScript等文件,而這些文件都是Core提供給客戶(hù)端使用的靜態(tài)文件。但是這些靜態(tài)文件需要在Core里面配置才可以對(duì)外公開(kāi)訪問(wèn)。

2.設(shè)置靜態(tài)文件目錄

靜態(tài)文件都存儲(chǔ)在Core Web根目錄中。默認(rèn)目錄是<content_root>/wwwroot,但可通過(guò) UseWebRoot方法更改訪問(wèn)目錄。而content_root是指web項(xiàng)目的所有文件夾,包括bin和wwwroot文件夾。

2.1 設(shè)置默認(rèn)靜態(tài)文件目錄

如果我們需要更改默認(rèn)目錄,該如何更改呢?讓我們來(lái)看看如下示例,現(xiàn)在有wwwroot默認(rèn)目錄和新建MyStaticFiles目錄:

然后配置如下代碼:

public class Program
{
    public static void Main(string[] args)
    {
        CreateWebHostBuilder(args).Build().Run();
    }
    public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
        WebHost.CreateDefaultBuilder(args)
            .UseStartup<Startup>()
.UseWebRoot(Directory.GetCurrentDirectory() + @"\MyStaticFiles\");//更改默認(rèn)目錄(wwwroot)路徑方法,如果不需要更改,則注釋這段代碼。
}
//需要在Startup.Configure配置靜態(tài)文件中間件。默認(rèn)已配置,所以一般不用手動(dòng)添加。
public class Startup
{
    public void Configure(IApplicationBuilder app)
    {
       app.UseStaticFiles();
    }
}

在Web主機(jī)在構(gòu)建站點(diǎn)的時(shí)候,我們通過(guò)UseWebRoot方法把默認(rèn)訪問(wèn)靜態(tài)文件路徑<content_root>/wwwroot更改為新建的<content_root>/MyStaticFiles文件路徑,再通過(guò)Startup.Configure方法配置靜態(tài)文件中間件讓其公開(kāi)可以訪問(wèn)。通過(guò)項(xiàng)目運(yùn)行,我們可以在瀏覽器地址欄上看到如下表格響應(yīng)結(jié)果:

根目錄

URL上圖片鏈接

更改默認(rèn)目錄前是否能打開(kāi)圖片鏈接

更改默認(rèn)目錄后是否能打開(kāi)圖片鏈接

<content_root>/wwwroot

https://localhost:5001/images/1.jpg

不能

<content_root>/MyStaticFiles

https://localhost:5001/images/2.jpg

不能

由上面表格結(jié)果,我們可以看到,未更改靜態(tài)文件默認(rèn)訪問(wèn)目錄前,<content_root>/wwwroot目錄下的靜態(tài)文件(HTML、CSS、IMG、JavaScript等)是可以訪問(wèn)的,而<content_root>/MyStaticFiles下的靜態(tài)文件是不可訪問(wèn)的。但是更改為<content_root>/MyStaticFiles目錄訪問(wèn)路徑后,<content_root>/wwwroot目錄下的靜態(tài)文件就訪問(wèn)不到了。下面我們?cè)趤?lái)看看如何配置訪問(wèn)Web根目錄外的文件。

2.2 設(shè)置訪問(wèn)Web根目錄外的文件

有時(shí)可能因?yàn)闃I(yè)務(wù)需求原因,為了區(qū)分默認(rèn)靜態(tài)文件,我們想要在Web根目錄下新建一個(gè)靜態(tài)文件夾處理業(yè)務(wù)。該如何配置呢?現(xiàn)在我們來(lái)了解下。
在2.1節(jié)點(diǎn)示例演示的時(shí)候,新建了一個(gè)MyStaticFiles目錄,現(xiàn)在就拿這個(gè)目錄來(lái)演示,請(qǐng)按如下方式配置靜態(tài)文件中間件:

public void Configure(IApplicationBuilder app)
{
    //設(shè)置默認(rèn)靜態(tài)文件
app.UseStaticFiles(); 
//設(shè)置自定義靜態(tài)文件
    app.UseStaticFiles(new StaticFileOptions
    {
        FileProvider = new PhysicalFileProvider(
            Path.Combine(Directory.GetCurrentDirectory(), "MyStaticFiles")),
        RequestPath = "/StaticFiles" //重寫(xiě)了一個(gè)虛擬路徑。
    });
}

由上述代碼可知,MyStaticFiles目錄通過(guò)StaticFiles URI段公開(kāi)。請(qǐng)求 http://<server_address>/StaticFiles/images/2.jpg提供 2.jpg 文件。也就是說(shuō)在設(shè)置自定義靜態(tài)文件中間件同時(shí)并不影響設(shè)置默認(rèn)靜態(tài)文件中間件。

3.設(shè)置HTTP響應(yīng)標(biāo)頭

Core提供了StaticFileOptions對(duì)象可用于設(shè)置HTTP響應(yīng)標(biāo)頭。除配置從Web根目錄提供靜態(tài)文件外,以下代碼還設(shè)置Cache-Control標(biāo)頭,例如設(shè)置靜態(tài)文件緩存時(shí)間:

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    var cachePeriod = env.IsDevelopment() ? "600" : "604800";
    app.UseStaticFiles(new StaticFileOptions
    {
        OnPrepareResponse = ctx =>
        {
            // Requires the following import:
            // using Microsoft.AspNetCore.Http;
            ctx.Context.Response.Headers.Append("Cache-Control", $"public, max-age={cachePeriod}");//(秒)
        }
    });
}

代碼中{cachePeriod}是設(shè)置瀏覽器緩存時(shí)間,這里我們?cè)O(shè)置為10分鐘(600秒)緩存時(shí)間:

通過(guò)瀏覽器輔助工具可以看到Response Headers設(shè)置了緩存時(shí)間。

4.靜態(tài)文件授權(quán)

在之間第四章節(jié),我們提到過(guò),靜態(tài)文件中間件一般在身份驗(yàn)證/授權(quán)中間件之前設(shè)置,所以靜態(tài)文件不需要驗(yàn)證,但是比如我們需要Controller控制器授權(quán)提供文件信息,該如何設(shè)置?請(qǐng)看如下代碼:

[Authorize]
public IActionResult BannerImage()
{
    var file = Path.Combine(Directory.GetCurrentDirectory(), 
                            "MyStaticFiles", "images", "banner1.svg");
    return PhysicalFile(file, "image/svg+xml");
}

返回結(jié)果:

5.啟用目錄瀏覽

通過(guò)目錄瀏覽,Web應(yīng)用的用戶(hù)可查看目錄列表和指定目錄中的文件。出于安全考慮,目錄瀏覽默認(rèn)處于禁用狀態(tài),啟用目錄瀏覽是有風(fēng)險(xiǎn)的。調(diào)用Startup.Configure中的UseDirectoryBrowser方法來(lái)啟用目錄瀏覽:

public void Configure(IApplicationBuilder app)
{
     //第一個(gè)調(diào)用提供wwwroot文件夾中的靜態(tài)文件。
   app.UseStaticFiles(); 
   //第二個(gè)調(diào)用使用URL http://<server_address>/MyImages瀏覽wwwroot/images文件夾的目錄。
    app.UseStaticFiles(new StaticFileOptions
    {
        FileProvider = new PhysicalFileProvider(
            Path.Combine(Directory.GetCurrentDirectory(), "wwwroot", "images")),
        RequestPath = "/MyImages"
    });
    app.UseDirectoryBrowser(new DirectoryBrowserOptions
    {
        FileProvider = new PhysicalFileProvider(
            Path.Combine(Directory.GetCurrentDirectory(), "wwwroot", "images")),
        RequestPath = "/MyImages"
    });
}

調(diào)用Startup.ConfigureServices中的AddDirectoryBrowser方法來(lái)添加所需服務(wù):

public void ConfigureServices(IServiceCollection services)
{
    services.AddDirectoryBrowser();
}

上述代碼允許使用URL http://<server_address>/MyImages瀏覽wwwroot/images文件夾的目錄,并鏈接到每個(gè)文件和文件夾:

6.設(shè)置靜態(tài)文件默認(rèn)文檔

6.1設(shè)置默認(rèn)文檔

在Core設(shè)置默認(rèn)主頁(yè)為訪問(wèn)者訪問(wèn)網(wǎng)站時(shí)提供了起點(diǎn),這種情況跟IIS上設(shè)置站點(diǎn)默認(rèn)文檔是一樣的。若要在用戶(hù)不完全限定URI的情況下提供默認(rèn)頁(yè)面,請(qǐng)調(diào)用Startup.Configure中的UseDefaultFiles方法:

public void Configure(IApplicationBuilder app)
{
    //要提供默認(rèn)文件,必須在UseStaticFiles前調(diào)用UseDefaultFiles。UseDefaultFiles實(shí)際上    //用于重寫(xiě)URL,不提供文件。通過(guò)UseStaticFiles啟用靜態(tài)文件中間件來(lái)提供文件。
    app.UseDefaultFiles();
    app.UseStaticFiles();
}

在wwwroot目錄下新增一個(gè)default.html頁(yè)面。這里要注意一點(diǎn)是,添加默認(rèn)文檔名稱(chēng)一樣要跟IIS上默認(rèn)文檔名稱(chēng)(default.htm,default.html,index.htm,index.html)都一致,否則如果自定義名稱(chēng),會(huì)默認(rèn)打開(kāi)路由默認(rèn)路徑地址。

6.2更改默認(rèn)文檔名稱(chēng)

6.1小節(jié)提到一個(gè)點(diǎn),添加默認(rèn)文檔都要跟IIS上默認(rèn)名稱(chēng)一致,但是如果我們需要自定義默認(rèn)文檔名稱(chēng)呢?該如何設(shè)置?以下代碼將默認(rèn)文件名更改為mydefault.html:

public void Configure(IApplicationBuilder app)
{
    // Serve my app-specific default file, if present.
    DefaultFilesOptions options = new DefaultFilesOptions();
    options.DefaultFileNames.Clear();
    options.DefaultFileNames.Add("mydefault.html");
    app.UseDefaultFiles(options);
    app.UseStaticFiles();
}

7.UseFileServer

Core提供了UseFileServer對(duì)象,這個(gè)對(duì)象集成了UseStaticFiles、UseDefaultFiles和 UseDirectoryBrowser的功能。下面我們通過(guò)代碼來(lái)看看如何使用。
提供靜態(tài)文件和默認(rèn)文件。未啟用目錄瀏覽:
app.UseFileServer();
通過(guò)啟用目錄瀏覽基于無(wú)參數(shù)重載進(jìn)行構(gòu)建:
app.UseFileServer(enableDirectoryBrowsing: true);
啟用靜態(tài)文件、默認(rèn)文件和及 MyStaticFiles 的目錄瀏覽示例代碼:

public void ConfigureServices(IServiceCollection services)
{
    services.AddDirectoryBrowser();
}
public void Configure(IApplicationBuilder app)
{
    app.UseStaticFiles(); // For the wwwroot folder

    app.UseFileServer(new FileServerOptions
    {
        FileProvider = new PhysicalFileProvider(
            Path.Combine(Directory.GetCurrentDirectory(), "MyStaticFiles")),
        RequestPath = "/StaticFiles",
        EnableDirectoryBrowsing = true
    });
}

參考文獻(xiàn):ASP.NET Core 中的靜態(tài)文件

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 詳解Asp.net 5中的ApplicationBuilder

    詳解Asp.net 5中的ApplicationBuilder

    這篇文章介紹了Asp.net 5中的ApplicationBuilder,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-01-01
  • ASP.NET2.0+SQL Server2005構(gòu)建多層應(yīng)用

    ASP.NET2.0+SQL Server2005構(gòu)建多層應(yīng)用

    ASP.NET2.0+SQL Server2005構(gòu)建多層應(yīng)用...
    2006-12-12
  • .net中的Span<T>類(lèi)和Memory<T>類(lèi)介紹

    .net中的Span<T>類(lèi)和Memory<T>類(lèi)介紹

    這篇文章介紹了.net中的Span<T>類(lèi)和Memory<T>類(lèi),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • ASP.NET?Core之Web?API介紹

    ASP.NET?Core之Web?API介紹

    這篇文章介紹了ASP.NET?Core?Web?API,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-04-04
  • ASP.NET 中的Application詳解

    ASP.NET 中的Application詳解

    Application對(duì)象是HttpApplicationState類(lèi)的一個(gè)實(shí)例,Application狀態(tài)是整個(gè)應(yīng)用程序全局的。本文主要詳細(xì)介紹Application對(duì)象的用法。
    2016-04-04
  • .NET?6新增的20個(gè)API介紹

    .NET?6新增的20個(gè)API介紹

    這篇文章介紹了.NET?6新增的20個(gè)API,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-12-12
  • ASP.NET Substitution 控件的使用方法

    ASP.NET Substitution 控件的使用方法

    Substitution 控件可用于采用緩存配置的 ASP.NET 網(wǎng)頁(yè)上。使用 Substitution 控件,可以在網(wǎng)頁(yè)上創(chuàng)建一些區(qū)域,這些區(qū)域可以動(dòng)態(tài)更新,然后集成到緩存的網(wǎng)頁(yè)中。
    2016-04-04
  • 詳解ABP框架中Session功能的使用方法

    詳解ABP框架中Session功能的使用方法

    ABP(ASP.NET Boilerplate Project)是基于ASP.NET框架的一個(gè)Web開(kāi)發(fā)框架,這里我們來(lái)詳解ABP框架中Session功能的使用方法,需要的朋友可以參考下
    2016-06-06
  • .NET Core 中的并發(fā)編程

    .NET Core 中的并發(fā)編程

    在.NET Core中,任務(wù) (tasks) 是并發(fā)編程的主要抽象表述,但還有其他支撐類(lèi)可以使我們的工作更容易。下面小編和大家一起學(xué)習(xí)一下吧
    2019-05-05
  • 一步步打造漂亮的新聞列表(無(wú)刷新分頁(yè)、內(nèi)容預(yù)覽)第三章

    一步步打造漂亮的新聞列表(無(wú)刷新分頁(yè)、內(nèi)容預(yù)覽)第三章

    前面兩個(gè)章節(jié)我們將需求分析和概要設(shè)計(jì)簡(jiǎn)單介紹了,接下來(lái)是重點(diǎn)的編代碼的階段了(實(shí)現(xiàn)無(wú)刷新分頁(yè))。在編寫(xiě)代碼之前,一定要有計(jì)劃的去編寫(xiě)代碼,不能一開(kāi)始啥也不管就開(kāi)始編代碼,除非你特牛。
    2010-07-07

最新評(píng)論