Nancy Self使用Razor视图主持空白响应

Jas*_*aat 16 c# razor nancy

南希0.6决议


我正试图让自己主持的南希回归剃刀观点,我无法让它发挥作用.南希源代码中的示例使用Web项目,但他们所拥有页面并未说明这是必需的.我已经尝试指定配置部分,但他们又说" 这一步是完全可选的 "(斜体是他们的).通过源跟踪它看起来不像razor是一个有效的视图引擎,但我没有看到我可以在配置或我自己的NancyModule中添加它...任何帮助将不胜感激.

查看引擎

当我最终发现他们正在查看views文件夹时,似乎cshtml是受支持的扩展,但是DefaultViewFactory没有它与视图引擎关联,所以我得到null:

在此输入图像描述

我的代码:

public Module1()
{
    Get["/me"] = parms =>
    {
        return View["Static.html"]; // WORKS!
    };
    Get["/you"] = parms =>
    {
        dynamic model = new ExpandoObject();
        //return View["~/Static.cshtml", model];
        //return View["/Static.cshtml", model];
        return View["Static.cshtml", model]; // blank page, no error or anything
    };
}
Run Code Online (Sandbox Code Playgroud)

Static.cshtml只是一个html页面,上面写着"Hello,world!"

Sal*_*nAA 10

console,form和wpf项目将视图文件定位在与可执行文件相同的位置.这意味着您必须将view.cshtml文件复制到项目bin\debug文件夹以在调试模式下工作.
所以:将.cshtml文件标记为复制到输出

  • 这对我有用.太糟糕了,这个问题被关闭了. (5认同)

Jas*_*aat 3

我解决了问题的一部分,当我创建 NancyHost 时,剃刀程序集没有加载到我的 AppDomain 中。NancyHost 具有 TinyIoc 扫描功能,并在启动时创建所有已加载程序集中所有类的列表,并且该列表永远不会更新。我通过创建 RazorViewEngine 来强制加载程序集来修复此问题。使用 Register() 调用也可以,但我认为只是因为它强制加载程序集,我认为 Nancy 有自己的容器。所有这些位置都有效,但如果我将其放入 NancyModule 中,它仍然不起作用:

//TinyIoC.TinyIoCContainer.Current.Register<RazorViewEngine>(); // WORKS
//RazorViewEngine rve = new RazorViewEngine(); // WORKS
m_Host = new NancyHost(m_Uri);
//TinyIoC.TinyIoCContainer.Current.Register<RazorViewEngine>(); // WORKS
m_Host.Start();
TinyIoC.TinyIoCContainer.Current.Register<RazorViewEngine>(); // WORKS
Run Code Online (Sandbox Code Playgroud)

如果有人想重写这个答案并找出更干净的方法或更好的解决方案,我会接受答案。