首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ASP.NET vNext上的Nancy不加载Nancy.Viewengines.Razor视图引擎

ASP.NET vNext上的Nancy不加载Nancy.Viewengines.Razor视图引擎
EN

Stack Overflow用户
提问于 2014-08-25 18:18:09
回答 2查看 861关注 0票数 2

我正和ASP.NET vNext一起在debian上试南希。我已经设置了一个示例项目,并让它与一个自托管的Owin应用程序一起工作。

Nancy似乎运行良好,但它正在寻找K运行时目录中的视图,Razor视图引擎不会加载。

K没有显示正在加载的Nancy.Viewengines.Razor,而是在project.json文件中。

这是我得到的错误:

Nancy.RequestExecutionException: Oh noes! ---> Nancy.ViewEngines.ViewNotFoundException: Unable to locate view 'ViewTest' Currently available view engine extensions: sshtml,html,htm Locations inspected: views/Home/ViewTest-nl-NL,views/Home/ViewTest,Home/ViewTest-nl-NL,Home/ViewTest,views/ViewTest-nl-NL,views/ViewTest,ViewTest-nl-NL,ViewTest Root path: /home/vnext/.kre/packages/KRE-mono45-x86.1.0.0-alpha3/bin/ If you were expecting raw data back, make sure you set the 'Accept'-header of the request to correct format, for example 'application/json' at Nancy.ViewEngines.DefaultViewFactory.GetRenderedView (string,object,Nancy.ViewEngines.ViewLocationContext) <0x008a3> .

我的project.json:

{ "dependencies": { "Microsoft.Owin.Hosting": "2.1.0-*", "Microsoft.Owin.Hosting": "2.1.0-*", "Microsoft.Owin.Host.HttpListener": "2.1.0-*", "Nancy": "0.23.2-*", "Nancy.Owin": "0.23.2-*", "Nancy.Viewengines.Razor": "0.23.2-*", }, }

加载的图书馆:

vnext@vnext:~/test/src$ k run /home/vnext/.kre/packages/KRE-mono45-x86.1.0.0-alpha3/bin/klr.host.dll Information : 0 : [LoaderContainer]: Load name=Microsoft.Owin.Host.HttpListener /home/vnext/.kre/packages/KRE-mono45-x86.1.0.0-alpha3/bin/klr.host.dll Information : 0 : [DefaultLoaderEngine]: LoadFile(/home/vnext/.kpm/packages/Microsoft.Owin.Host.HttpListener/2.1.0/lib/net45/Microsoft.Owin.Host.HttpListener.dll) /home/vnext/.kre/packages/KRE-mono45-x86.1.0.0-alpha3/bin/klr.host.dll Information : 0 : [NuGetAssemblyLoader]: Loaded name=Microsoft.Owin.Host.HttpListener in 1ms /home/vnext/.kre/packages/KRE-mono45-x86.1.0.0-alpha3/bin/klr.host.dll Information : 0 : [LoaderContainer]: Load name=Nancy.Owin /home/vnext/.kre/packages/KRE-mono45-x86.1.0.0-alpha3/bin/klr.host.dll Information : 0 : [DefaultLoaderEngine]: LoadFile(/home/vnext/.kpm/packages/Nancy.Owin/0.23.2/lib/net40/Nancy.Owin.dll) /home/vnext/.kre/packages/KRE-mono45-x86.1.0.0-alpha3/bin/klr.host.dll Information : 0 : [NuGetAssemblyLoader]: Loaded name=Nancy.Owin in 1ms

当我将它放在KRE bin目录中,而不是在项目的view文件夹中时,它将加载一个普通的html视图。

如何强迫Nancy查看正确的文件夹,以及如何加载Razor视图引擎?

这是我使用过的代码:https://github.com/matthijsbreemans/nancy-owin-vnext

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-05-22 06:35:42

默认情况下,南希扫描AppDomain.CurrentDomain.BaseDirectory以查找程序集。在vNext中,程序集存储在单独的包中,而不是存储在bin目录中,因此它找不到Razor视图引擎。在完全支持可用之前,您可以实现自己的引导程序并覆盖ViewEngines列表:

代码语言:javascript
复制
protected override void ConfigureApplicationContainer(TinyIoCContainer container)
{
    base.ConfigureApplicationContainer(container);
    container.Register<IViewEngine, Nancy.ViewEngines.Razor.RazorViewEngine>();
    container.Register<Nancy.ViewEngines.Razor.IRazorConfiguration, Nancy.    ViewEngines.Razor.DefaultRazorConfiguration>();
}

protected override IEnumerable<Type> ViewEngines
{
    get { return new[] { typeof(Nancy.ViewEngines.Razor.RazorViewEngine) }; }
}

视图也存储在不同的目录中(特别是在发布时)。创建一个实现IRootPathProvider的新类,并返回IApplicationEnvironment.ApplicationBasePath。我已经通过将IApplicationEnvironment存储在一个静态变量中(南希中的IoC本身在引导程序中使用它时找不到实例)来完成这一工作(目前作为一种解决办法):

代码语言:javascript
复制
public class Startup
{
    internal static IApplicationEnvironment Environment { get; private set; }

    public Startup(IApplicationEnvironment env)
    {
        Environment = env;
    }

    public void ConfigureServices(IServiceCollection services) { }

    public void Configure(IApplicationBuilder app)
    {
        app.UseOwin(a => a.UseNancy());
    }
}

并实现南希的IRootPathProvider

代码语言:javascript
复制
public class vNextRootPathProvider : IRootPathProvider
{
    private string BasePath = Startup.Environment.ApplicationBasePath;

    public string GetRootPath()
    {
        return BasePath;
    }
}
票数 3
EN

Stack Overflow用户

发布于 2015-05-05 08:53:02

KRE找不到视图目录,您可以自定义Bootstrapper并重写IRootPathProvider,将根目录设置为绝对路径。看:https://github.com/NancyFx/Nancy/wiki/The-root-path

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

https://stackoverflow.com/questions/25492019

复制
相关文章

相似问题

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