簡體   English   中英

.NET Core Nancy應用程序提供靜態文件

[英].NET Core Nancy application serving static files

我正在嘗試使用Nancy構建一個最小的可行網站作為.NET Core項目,其中一些后端處理和靜態文件作為前端駐留在默認項目文件夾wwwroot 主要問題是我不明白如何使應用程序響應靜態文件,因為默認約定不適用於新的.NET Core項目系統。

將Nancy應用程序構建為經典的.NET Framework應用程序已有詳細記錄,網上有很多關於如何執行此操作的示例。 但.NET Core項目( .xproj )與傳統的.NET Framework項目( .csproj )有很大不同。 我很喜歡新的項目系統,但我不明白如何將Nancy部分集成到其中。 而且缺乏關於如何做的文檔和樣本。

TL; DRGitHub存儲庫 ,其中包含所有需要的管道代碼的演示項目所在。 對於Nancy v.1.4.3以及對於預發布版本2.0.0-barneyrubble。

支持.NET Core和.NET Standard的Nancy v.2仍然處於預發布狀態,所以即使你想堅持使用穩定的v​​.1分支 - 沒問題。

以下是從頭開始如何做到這一步的一步一步,這對我有用

1)創建一個新的空ASP.NET核心Web應用程序

2) (如果你想堅持Nancy "netcoreapp1.0"必須提供打開project.json ,刪除"Microsoft.NETCore.App"依賴項並將目標框架從"netcoreapp1.0"更改為"net46" ,這樣frameworks部分就會顯示像那樣:

"frameworks": {
    "net46": {}
},

3)將以下依賴項添加到project.json: "Microsoft.AspNetCore.Owin""Nancy" 在編寫project.json的依賴項部分時為project.json

"dependencies": {
  // Ommited dependencies
  "Microsoft.AspNetCore.Owin": "1.0.0",
  "Nancy": "1.4.3"
},

對於第2節:

"dependencies": {
  // Ommited dependencies
  "Microsoft.AspNetCore.Owin": "1.0.0",
  "Nancy": "2.0.0-barneyrubble"
},

4)創建一個實現IRootPathProvider的類,並通過利用IHostingEnvironment對象在運行時提供wwwroot文件夾( WebRootPath屬性)的路徑:

public class AppRootPathProvider : IRootPathProvider
{
    private readonly IHostingEnvironment _environment;

    public AppRootPathProvider(IHostingEnvironment environment)
    {
        _environment = environment;
    }
    public string GetRootPath()
    {
        return _environment.WebRootPath;
    }
}

5)創建一個派生自DefaultNancyBootstrapper的類,它將檢索IHostingEnvironment對象並將其傳遞給先前定義的Root Provider。 它還將使用您自己的更改默認StaticContentsConventions

public class AppNancyBootstrapper : DefaultNancyBootstrapper
{
    public AppNancyBootstrapper(IHostingEnvironment environment)
    {
        RootPathProvider = new AppRootPathProvider(environment);
    }

    protected override void ConfigureConventions(NancyConventions conventions)
    {
        base.ConfigureConventions(conventions);

        conventions.StaticContentsConventions.AddDirectory("css");
        conventions.StaticContentsConventions.AddDirectory("js");
        conventions.StaticContentsConventions.AddDirectory("fonts");
    }

    protected override IRootPathProvider RootPathProvider { get; }
}

6)打開Startup類並用這一個替換Configure方法中的最后一行:

app.UseOwin(x => x.UseNancy(options => options.Bootstrapper = new AppNancyBootstrapper(env)));

它利用上一步中創建的Bootstrapper。

7)現在是時候定義你的NancyModule V. 1:

public class AppNancyModule : NancyModule
{
    public AppNancyModule()
    {
        Get["/"] = _ => View["index"];
        Get["/{fileName}"] = parameters => View[parameters.fileName];
    }
}

五.2:

public class AppNancyModule : NancyModule
{
    public AppNancyModule()
    {
        Get("/", _ => View["index"]);
        Get("/{fileName}", parameters => View[parameters.fileName]);
    }
}

你很高興去! 只需將您的靜態文件放在wwwroot - 然后關閉。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM