2

Debian で ASP.NET vNext を使用して Nancy を試しています。サンプル プロジェクトをセットアップし、自己ホスト型の 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

プロジェクトの View フォルダーではなく、KRE bin ディレクトリに配置すると、通常の html ビューが読み込まれます。

Nancy に正しいフォルダーを強制的に表示させるにはどうすればよいですか? また、Razor ビューエンジンを読み込むにはどうすればよいですか?

これは私が使用したコードです: https://github.com/matthijsbreemans/nancy-owin-vnext

4

2 に答える 2

3

Nancy はAppDomain.CurrentDomain.BaseDirectory、既定でアセンブリをスキャンします。vNext では、アセンブリは bin ディレクトリではなく個別のパッケージに格納されるため、Razor ビュー エンジンを見つけることができません。完全なサポートが利用可能になるまでは、独自のブートストラップを実装して、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) }; }
}

ビューも別のディレクトリに保存されます (特に公開された場合)。を実装する新しいクラスを作成しIRootPathProvider、 を返しますIApplicationEnvironment.ApplicationBasePath。IApplicationEnvironment を静的変数に格納することでこれを (今のところ回避策として) 実行しました (Nancy の IoC 自体は、ブートストラップで使用するときにインスタンスを見つけることができません)。

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's を実装しますIRootPathProvider:

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

    public string GetRootPath()
    {
        return BasePath;
    }
}
于 2015-05-22T06:35:42.113 に答える
-1

KRE はビュー ディレクトリを見つけることができませんIRootPathProvider。ルート ディレクトリを絶対パスに設定して、ブートストラップとオーバーライドをカスタマイズできます。見てください: https://github.com/NancyFx/Nancy/wiki/The-root-path

于 2015-05-05T08:53:02.880 に答える