Dei*_*lan 5 .net c# nancy .net-core
我正在尝试使用Nancy构建一个最小的可行网站作为.NET Core项目,其中一些后端处理和静态文件作为前端驻留在默认项目文件夹中wwwroot.主要问题是我不明白如何使应用程序响应静态文件,因为默认约定不适用于新的.NET Core项目系统.
将Nancy应用程序构建为经典的.NET Framework应用程序已有详细记录,网上有很多关于如何执行此操作的示例.但.NET Core项目(.xproj)与传统的.NET Framework项目(.csproj)有很大不同.我很喜欢新的项目系统,但我不明白如何将Nancy部分集成到其中.而且缺乏关于如何做的文档和样本.
TL; DR:GitHub存储库,其中包含所有需要的管道代码的演示项目所在.对于Nancy v.1.4.3以及对于预发布版本2.0.0-barneyrubble.
支持.NET Core和.NET Standard的Nancy v.2仍然处于预发布状态,所以即使你想坚持使用稳定的v.1分支 - 没问题.
以下是从头开始如何做到这一步的一步一步,这对我有用:
1)创建一个新的空ASP.NET核心Web应用程序
2)(如果你想坚持Nancy v.1必须提供)打开project.json,删除"Microsoft.NETCore.App"依赖关系并将目标框架从更改"netcoreapp1.0"为"net46",所以frameworks部分看起来像这样:
"frameworks": {
"net46": {}
},
Run Code Online (Sandbox Code Playgroud)
3)将以下依赖项添加到project.json:"Microsoft.AspNetCore.Owin"和"Nancy".在编写v.1的依赖关系部分时project.json:
"dependencies": {
// Ommited dependencies
"Microsoft.AspNetCore.Owin": "1.0.0",
"Nancy": "1.4.3"
},
Run Code Online (Sandbox Code Playgroud)
对于第2节:
"dependencies": {
// Ommited dependencies
"Microsoft.AspNetCore.Owin": "1.0.0",
"Nancy": "2.0.0-barneyrubble"
},
Run Code Online (Sandbox Code Playgroud)
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;
}
}
Run Code Online (Sandbox Code Playgroud)
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; }
}
Run Code Online (Sandbox Code Playgroud)
6)打开Startup类并用这个替换Configure方法中的最后一行:
app.UseOwin(x => x.UseNancy(options => options.Bootstrapper = new AppNancyBootstrapper(env)));
Run Code Online (Sandbox Code Playgroud)
它利用上一步中创建的Bootstrapper.
7)现在是时候定义你的了NancyModule.V. 1:
public class AppNancyModule : NancyModule
{
public AppNancyModule()
{
Get["/"] = _ => View["index"];
Get["/{fileName}"] = parameters => View[parameters.fileName];
}
}
Run Code Online (Sandbox Code Playgroud)
五.2:
public class AppNancyModule : NancyModule
{
public AppNancyModule()
{
Get("/", _ => View["index"]);
Get("/{fileName}", parameters => View[parameters.fileName]);
}
}
Run Code Online (Sandbox Code Playgroud)
你很高兴去!只需将静态文件放入wwwroot- 然后关闭即可.
| 归档时间: |
|
| 查看次数: |
810 次 |
| 最近记录: |