我正在尝试使用Nancy构建一个最小的可行网站作为.NET Core项目,其中一些后端处理和静态文件作为前端驻留在默认项目文件夹wwwroot
中。主要问题是我不了解如何使应用程序使用静态文件进行响应,因为默认约定不适用于新的.NET Core项目系统。
将Nancy应用程序构建为经典的.NET Framework应用程序已有详细记录,并且Web上有许多关于如何执行此操作的示例。但.NET Core项目(.xproj
)与传统的.NET Framework项目(.csproj
)有很大不同。我很喜欢新的项目系统,但我不了解如何将Nancy部分集成到其中。而且缺乏关于如何做的文档和样本。
答案 0 :(得分:7)
TL; DR :GitHub repository,其中包含所有需要的管道代码的演示项目所在。对于Nancy v.1.4.3以及对于预发布版本2.0.0-barneyrubble。
Nancy v.2,支持.NET Core和.NET Standard仍处于预发布状态,所以即使你想坚持使用稳定的v.1分支 - 没问题。
以下是如何从头开始一步一步的工作,这对我有用:
1)创建一个新的空ASP.NET核心Web应用程序
2)(如果你想坚持Nancy v.1,必须提供)打开project.json
,删除"Microsoft.NETCore.App"
依赖关系,并从"netcoreapp1.0"
更改目标框架到"net46"
,所以frameworks
部分看起来像这样:
"frameworks": {
"net46": {}
},
3)将以下依赖项添加到project.json:"Microsoft.AspNetCore.Owin"
和"Nancy"
。在为{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
个对象并将其传递给先前定义的根提供者。它还将使用您自己的更改默认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
类,用{1}}方法替换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
中 - 然后关闭。