首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >提供静态文件的.NET核心南希应用程序

提供静态文件的.NET核心南希应用程序
EN

Stack Overflow用户
提问于 2016-11-30 00:15:57
回答 1查看 945关注 0票数 5

我试图建立一个最小可行的网站作为一个.NET核心项目使用南希一些后端处理和静态文件作为前端,它驻留在默认的项目文件夹wwwroot。主要的问题是我不知道如何让应用程序响应静态文件,因为默认约定不适用于新的.NET核心项目系统。

将Nancy应用程序构建为经典的.NET框架应用程序有很好的文档,web上有许多关于如何做到这一点的示例。但是.NET核心项目(.xproj)与经典的.NET框架项目(.csproj)有很大的不同。我非常喜欢这个新的项目系统,但我不知道如何将Nancy parts集成到其中。而且缺乏关于如何做到这一点的文档和示例。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-11-30 00:15:57

TL;DRGitHub repository,演示项目包含所有需要的管道代码。适用于Nancy v1.4.3以及预发布v2.0.0-barneyrubble。

支持.NET核心和.NET标准的南希v2仍然处于预发布状态,所以即使你想坚持使用稳定的v1分支-没问题。

这里有一步一步地告诉你如何从头做起,这对我很有效

1)创建新的空ASP.NET核心网络应用程序

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

代码语言:javascript
复制
"frameworks": {
    "net46": {}
},

3)在project.json中添加以下依赖:"Microsoft.AspNetCore.Owin""Nancy"。在为v1编写project.json的依赖项部分时:

代码语言:javascript
复制
"dependencies": {
  // Ommited dependencies
  "Microsoft.AspNetCore.Owin": "1.0.0",
  "Nancy": "1.4.3"
},

对于第2版:

代码语言:javascript
复制
"dependencies": {
  // Ommited dependencies
  "Microsoft.AspNetCore.Owin": "1.0.0",
  "Nancy": "2.0.0-barneyrubble"
},

4)创建一个实现IRootPathProvider的类,并在运行时使用wwwroot对象提供您的WebRootPath文件夹( IHostingEnvironment属性)的路径:

代码语言:javascript
复制
public class AppRootPathProvider : IRootPathProvider
{
    private readonly IHostingEnvironment _environment;

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

5)创建一个从DefaultNancyBootstrapper派生的类,该类将检索IHostingEnvironment对象并将其传递给先前定义的根提供者。它还会将默认StaticContentsConventions更改为您自己的your:

代码语言:javascript
复制
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方法的最后一行替换为:

代码语言:javascript
复制
app.UseOwin(x => x.UseNancy(options => options.Bootstrapper = new AppNancyBootstrapper(env)));

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

7)现在是时候定义你的NancyModule了。第1节:

代码语言:javascript
复制
public class AppNancyModule : NancyModule
{
    public AppNancyModule()
    {
        Get["/"] = _ => View["index"];
        Get["/{fileName}"] = parameters => View[parameters.fileName];
    }
}

第2节:

代码语言:javascript
复制
public class AppNancyModule : NancyModule
{
    public AppNancyModule()
    {
        Get("/", _ => View["index"]);
        Get("/{fileName}", parameters => View[parameters.fileName]);
    }
}

你就可以走了!只需将静态文件放在wwwroot中--然后启动即可。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40870618

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档