servicestack,Razor,servicestack" /> servicestack,Razor,servicestack" />

ServiceStack未呈现Razor视图。只是看看快照。配置错误?

ServiceStack未呈现Razor视图。只是看看快照。配置错误?,razor,servicestack,Razor,servicestack,注意:这个问题虽然相似,但涉及不同的问题 无论出于何种原因,ServiceStack似乎没有运行/编译Razor视图,并且似乎是配置问题,但是RazorRockStart运行正常 我正在使用ServiceStack 4.0.11,并与运行ServiceStack 4.0.8的RazorRockstars进行了比较 在VS2013中,我创建了一个新的ASP.NET网站(空) 安装软件包ServiceStack 安装ServiceStack.Razor包 将HttpHandler添加到web.con

注意:这个问题虽然相似,但涉及不同的问题

无论出于何种原因,ServiceStack似乎没有运行/编译Razor视图,并且似乎是配置问题,但是RazorRockStart运行正常

我正在使用ServiceStack 4.0.11,并与运行ServiceStack 4.0.8的RazorRockstars进行了比较

  • 在VS2013中,我创建了一个新的ASP.NET网站(空)
  • 安装软件包ServiceStack
  • 安装ServiceStack.Razor包
  • 将HttpHandler添加到web.config
  • 在Global.asax应用程序_Start中创建了AppHost和.Init()
  • LoadPlugin(新的RazorFormat())
  • 创建/Services/HomeService.cs(从ServiceStack.Service继承)
  • 在HomeService中创建Home route
  • 已创建/Views/Home/Home.cshtml
  • 我在VS 2013上运行调试,在进入
    /home
    时,我得到的只是ServiceStack快照。我错过了什么

    /AppHost.cs

    using Funq;
    using ServiceStack;
    using ServiceStack.Razor;
    namespace SSTest
    {
        public class AppHost : AppHostBase
        {
            public AppHost() : base("SSTest", typeof(AppHost).Assembly) { }
            public override void Configure(Container container)
            {
                LoadPlugin(new RazorFormat());
            }
            public static void Start()
            {
                new AppHost().Init();
            }
        }
    }
    
    using ServiceStack;
    namespace SSTest.Services
    {
        [Route("/home")]
        public class Home
        {
            public string Name { get; set; }
        }
        [DefaultView("Home")]
        public class HomeServices : Service
        {
            public object Get(Home request)
            {
                return new Home(){Name = "Here's home!"};
            }   
        }
    }
    
    /Global.asax

    protected void Application_Start(object sender, EventArgs e)
    {
        AppHost.Start();
    }
    
    /Services/HomeService.cs

    using Funq;
    using ServiceStack;
    using ServiceStack.Razor;
    namespace SSTest
    {
        public class AppHost : AppHostBase
        {
            public AppHost() : base("SSTest", typeof(AppHost).Assembly) { }
            public override void Configure(Container container)
            {
                LoadPlugin(new RazorFormat());
            }
            public static void Start()
            {
                new AppHost().Init();
            }
        }
    }
    
    using ServiceStack;
    namespace SSTest.Services
    {
        [Route("/home")]
        public class Home
        {
            public string Name { get; set; }
        }
        [DefaultView("Home")]
        public class HomeServices : Service
        {
            public object Get(Home request)
            {
                return new Home(){Name = "Here's home!"};
            }   
        }
    }
    
    /Views/Home/Home.cshtml

    @{
        Layout = null;
    }
    <!DOCTYPE html>
    <html>
    <head>
        <meta name="viewport" content="width=device-width" />
        <title>Home</title>
    </head>
    <body>
        <div>
        <h1>This is home!!</h1>
        </div>
    </body>
    </html>
    

    您的视图应位于
    /Views/Home.cshtml
    中,而不是
    /Views/Home/Home.cshtml

    内部
    配置()
    插件应加载以下内容:

    Plugins.Add(new RazorFormat()); 
    
    在ServiceStack.Razor
    Layout=null
    中,建议使用默认布局模板
    Views\\u Layout.cshtml
    ,您可以选择不使用任何带有
    Layout=”“
    的模板

    如果未安装OrmLite,则希望通过从Web.config中删除ServiceStack.OrmLite命名空间,从而将其从所有Razor页面中删除:

    <add namespace="ServiceStack.OrmLite" />
    

    我知道mythz已经解决了您的问题,但还有一些其他问题需要检查,以备将来的读者遇到同样的问题:

    确保将
    *.cshtml
    文件复制到输出目录。不管什么原因,我的不是,因此ServiceStack找不到它们,我得到的只是像你一样的快照


    我不确定这是否与使用自托管控制台应用程序而不是web项目有关。

    我遇到了完全相同的问题!使用当前的ServiceStack VS template(截至2015年4月1日,不,这不是愚人节玩笑!),如果您运行的是自托管服务,下面的一行会把事情搞砸:

    这在
    SetConfig(newhostconfig{/*…here…*/})中的
    Configure(Container)
    函数的
    AppHost.cs
    文件中

    注释掉整个
    WebHostPhysicalPath=…
    行,然后重新运行应用程序

    与简单注释相比,更好的修复方法是通过以下方式设置正确的目录,即实际的bin目录:

    WebHostPhysicalPath = Path.GetFullPath("~".MapServerPath()),
    
    或者,如果您有一个特定的构建体系结构(即x86或x64而不是AnyCPU),则可能有第三层文件夹。因此,将WebHostPhysicalPath更改为:

    WebHostPhysicalPath = Path.GetFullPath(Path.Combine("~".MapServerPath(), "..", "..", "..")),
    

    我也试过把它搬到那里去。它在任何位置都不适用于cshtml。注意:在工作的RazorRockstars中,我创建了一个“/Views/Rockstars/”目录,并将“Rockstars.cshtml”放在该目录(/Views/Rockstars/Rockstars.cshtml)中,Rockstars仍然正确运行,因此我认为这不是问题所在。我还成功地将视图子目录与ServiceStace v3一起使用。我想这是我遗漏的一些配置问题。但不确定是什么。另外,我在根目录中创建了一个default.cshtml,但效果不太好。似乎没有razor页面可以工作。注意:inside Configure()插件应该加载:
    Plugins.Add(新RazorFormat())。您是否有
    视图\\u布局.cshtml
    ?因为Layout=null,建议使用默认布局模板,而Layout=”“建议不使用。在Configure()中,
    LoadPlugin()
    Plugins.Add()
    之间有什么区别
    Plugins.Add(new RazorFormat())
    似乎抛出了一个
    HttpCompileException
    说它需要
    OrmLite
    ,但是我在这个测试项目中没有使用OrmLite。我安装了包ServiceStack.OrmLite,并运行了这个项目,现在可以正常工作了。我不知道为什么Razor视图需要
    或mlite
    。我会在尝试其他未记录的配置之前查找该错误(脏DLL?)。RazorFormat甚至不引用OrmLite,因此它掩盖了一个不同的错误。Configure中的插件在完成所需的初始化后延迟加载,而LoadPlugin会尝试加载插件,这在Configure()中是不正确的。Hmmm。。。我只是设置了这个干净的项目(上面提到的步骤)来测试ServiceStack中的Razor视图。除了单个Razor视图和服务之外,此测试项目中没有DB调用或任何内容。在这个项目中,除了上面的问题中列出的代码之外,我没有其他代码。这就是为什么我不明白为什么它说的是错误<代码>System.Web.HttpCompileException(0x80004005):错误CS0234:命名空间“ServiceStack”中不存在类型或命名空间名称“OrmLite”(是否缺少程序集引用?)。位于ServiceStack.Razor.Managers.RazorAgersolver.CreateRazorPageInstance
    …确定然后要删除“ServiceStack.OrmLite”从Web.Config中的Razor名称空间,因为它不在您的项目中。如果您对如何调试特定cshtml视图未找到或不符合返回条件的原因有任何建议,将非常有用。例如,是否存在类似日志的内容,或者我们是否能够强制SS仅返回cshtml视图并查看结果错误?上帝是的。我喜欢ServiceStack,但我现在已经花了8个小时试图让一个简单的基于Razor的站点使用它。非常令人沮丧,不知道我做错了什么!!!我未来的自我注意:确保布局页面中没有任何错误。掌纹