ASP.NET vNext上的Nancy不加载Nancy.Viewengines.Razor viewengine
我正在用debian上的ASP.NETVNEXT尝试Nancy。我已经设置了一个示例项目,并使其与自托管Owin应用程序一起工作 Nancy it self似乎运行良好,但它正在K运行时目录中查找视图,Razor viewengine不会加载 尽管Nancy.Viewengines.Razor在project.json文件中,但K并不显示它正在被加载 这是我得到的错误:ASP.NET vNext上的Nancy不加载Nancy.Viewengines.Razor viewengine,razor,nancy,asp.net-core,Razor,Nancy,Asp.net Core,我正在用debian上的ASP.NETVNEXT尝试Nancy。我已经设置了一个示例项目,并使其与自托管Owin应用程序一起工作 Nancy it self似乎运行良好,但它正在K运行时目录中查找视图,Razor viewengine不会加载 尽管Nancy.Viewengines.Razor在project.json文件中,但K并不显示它正在被加载 这是我得到的错误: Nancy.RequestExecutionException:哦,没有!-->Nancy.ViewEngines.ViewN
Nancy.RequestExecutionException:哦,没有!-->Nancy.ViewEngines.ViewNotFoundException:找不到视图“ViewTest”
当前可用的视图引擎扩展:sshtml、html、htm
检查的位置:视图/主视图/视图测试nl nl nl、视图/主视图/视图测试nl nl、主视图/视图测试nl nl、视图/视图测试nl nl、视图/视图测试nl、视图测试nl、视图测试nl
根路径:/home/vnext/.kre/packages/kre-mono45-x86.1.0.0-alpha3/bin/
如果您希望返回原始数据,请确保将请求的“Accept”-标头设置为正确的格式,例如Nancy.ViewEngines.DefaultViewFactory.GetRenderedView(string,object,Nancy.ViewEngines.ViewLocationContext)中的“application/json”
.
My project.json:
{
“依赖项”:{
“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运行
/home/vnext/.kre/packages/kre-mono45-x86.1.0.0-alpha3/bin/klr.host.dll信息:0:[LoaderContainer]:加载名称=Microsoft.Owin.host.HttpListener
/home/vnext/.kre/packages/kre-mono45-x86.1.0.0-alpha3/bin/klr.host.dll信息:0:[DefaultLoaderEngine]:加载文件(/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信息:0:[NuGetAssemblyLoader]:加载的名称=Microsoft.Owin.host.HttpListener(1ms)
/home/vnext/.kre/packages/kre-mono45-x86.1.0.0-alpha3/bin/klr.host.dll信息:0:[LoaderContainer]:加载名称=Nancy.Owin
/home/vnext/.kre/packages/kre-mono45-x86.1.0.0-alpha3/bin/klr.host.dll信息:0:[DefaultLoaderEngine]:加载文件(/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信息:0:[NuGetAssemblyLoader]:加载的名称=Nancy.Owin,1ms
当我把它放在krebin目录中,而不是放在项目的view文件夹中时,它将加载一个普通的html视图
如何强制Nancy查看正确的文件夹,以及如何加载Razor viewengine
这是我使用的代码:KRE找不到视图目录,您可以自定义引导程序并覆盖
IRootPathProvider
,将根目录设置为绝对路径。查看:默认情况下,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) }; }
}
并实现Nancy的IRootPathProvider:
public class vNextRootPathProvider : IRootPathProvider
{
private string BasePath = Startup.Environment.ApplicationBasePath;
public string GetRootPath()
{
return BasePath;
}
}
public class vNextRootPathProvider : IRootPathProvider
{
private string BasePath = Startup.Environment.ApplicationBasePath;
public string GetRootPath()
{
return BasePath;
}
}