razor - ASP.NET vNext 上的 Nancy 不加载 Nancy.Viewengines.Razor viewengine

标签 razor nancy asp.net-core

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

Nancy 本身似乎运行良好,但它正在 K 运行时目录中查找 View ,并且 Razor View 引擎无法加载。

尽管 Nancy.Viewengines.Razor 位于 project.json 文件中,但 K 并未显示正在加载的 Nancy.Viewengines.Razor

这是我收到的错误:

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> .

我的项目.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 View 。

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

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

最佳答案

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

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) }; }
}

View 也存储在不同的目录中(尤其是发布时)。创建一个实现 IRootPathProvider 的新类,并返回 IApplicationEnvironment.ApplicationBasePath 。我已经通过将 IApplicationEnvironment 存储在静态变量中来完成此操作(目前作为解决方法)(Nancy 中的 IoC 本身在 Bootstrap 中使用它时找不到实例):

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());
    }
}

并实现 Nancy 的 IRootPathProvider :

public class vNextRootPathProvider : IRootPathProvider
{
    private string BasePath = Startup.Environment.ApplicationBasePath;

    public string GetRootPath()
    {
        return BasePath;
    }
}

关于razor - ASP.NET vNext 上的 Nancy 不加载 Nancy.Viewengines.Razor viewengine,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25492019/

相关文章:

c# - 自定义 html 帮助程序中的 css id

c# - 如何将 anchor 标记 HTML 链接转换为使用 @Html.ActionLink

javascript - 使用嵌套布局在一个部分中呈现所有 Javascript 代码

visual-studio - 等待后台操作完成

azure - 为什么 WAIISHost 会锁定某些文件

c# - 使用 Razor 在 Nancy 创建像 BeginForm 这样的 Html 助手

c# - 为方法编写 NUnit 测试用例

c# - ASP.NET Core InvalidOperationException : Unable to resolve service for type DbContext while attempting to activate UserStore

c# - 是否可以在 ASP.NET Core 中组合 [FromRoute] 和 [FromBody]?

asp.net-core - 哪些版本的 Windows Server 与 .NET Core 运行时 RID 匹配