ServiceStack未呈现Razor视图。只是看看快照。配置错误?
注意:这个问题虽然相似,但涉及不同的问题 无论出于何种原因,ServiceStack似乎没有运行/编译Razor视图,并且似乎是配置问题,但是RazorRockStart运行正常 我正在使用ServiceStack 4.0.11,并与运行ServiceStack 4.0.8的RazorRockstars进行了比较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
/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.RazorLayout=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的站点使用它。非常令人沮丧,不知道我做错了什么!!!我未来的自我注意:确保布局页面中没有任何错误。掌纹