gpt4 book ai didi

c# - 提供静态文件的 .NET Core Nancy 应用程序

转载 作者:太空狗 更新时间:2023-10-29 22:57:16 25 4
gpt4 key购买 nike

我正在尝试使用 Nancy 构建一个最小可行的网站作为 .NET Core 项目,并使用一些后端处理和静态文件作为前端,该文件驻留在默认项目文件夹 wwwroot 中。主要问题是我不明白如何让应用程序响应静态文件,因为默认约定不适用于新的 .NET Core 项目系统。

将 Nancy 应用程序构建为经典 .NET Framework 应用程序已有详细记录,并且网络上有许多关于如何执行此操作的示例。但是 .NET Core 项目 (.xproj) 与经典的 .NET Framework 项目 (.csproj) 有很大不同。我很喜欢新的项目系统,但我不明白如何将Nancy部分集成到其中。并且缺少有关如何执行此操作的文档和示例。

最佳答案

长话短说:GitHub repository ,其中包含所有需要的管道代码的演示项目。对于 Nancy v. 1.4.3 以及预发布版 v. 2.0.0-barneyrubble。

支持 .NET Core 和 .NET Standard 的 Nancy v.2 仍处于预发布状态,因此即使您想坚持使用稳定的 v.1 分支 - 没问题。

这里是关于如何从头开始的分步操作,对我很有效:

1) 创建一个新的空 ASP.NET Core Web 应用程序

2) (如果您想坚持使用 Nancy v.1,则必须这样做) 打开 project.json,删除 "Microsoft.NETCore.App" 依赖并将目标框架从 "netcoreapp1.0" 更改为 "net46",因此 frameworks 部分将如下所示:

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

3) 将以下依赖项添加到 project.json:"Microsoft.AspNetCore.Owin""Nancy"。在为 v.1 编写 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 的类,并将在运行时使用 提供到您的 wwwroot 文件夹(WebRootPath 属性)的路径>IHostingEnvironment 对象:

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 的时候了。五、1:

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

V. 2:

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

你很高兴去!只需将您的静态文件放在 wwwroot 中 - 然后启动。

关于c# - 提供静态文件的 .NET Core Nancy 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40870618/

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