注意:这个问题虽然类似to this one,但它涉及不同的问题。
似乎无论出于何种原因,ServiceStack都没有运行/编译Razor视图,看起来像配置问题,但是RazorRockstarts运行正常。
我正在使用ServiceStack 4.0.11,并与运行ServiceStack 4.0.8的RazorRockstars进行了比较
我在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();
}
}
}
/Global.asax
protected void Application_Start(object sender, EventArgs e)
{
AppHost.Start();
}
/Services/HomeService.cs
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>
/Web.config
<?xml version="1.0" encoding="utf-8"?>
<!--
For more information on how to configure your ASP.NET application, please visit
http://go.microsoft.com/fwlink/?LinkId=169433
-->
<configuration>
<configSections>
<sectionGroup name="system.web.webPages.razor" type="System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
<section name="host" type="System.Web.WebPages.Razor.Configuration.HostSection, System.Web.WebPages.Razor, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
<section name="pages" type="System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
</sectionGroup>
</configSections>
<system.web>
<httpHandlers>
<add path="*" type="ServiceStack.HttpHandlerFactory, ServiceStack" verb="*" />
</httpHandlers>
<compilation debug="true" targetFramework="4.5">
<assemblies>
<add assembly="System.Web.WebPages.Razor, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
</assemblies>
<buildProviders>
<add extension=".cshtml" type="ServiceStack.Razor.CSharpRazorBuildProvider, ServiceStack.Razor" />
</buildProviders>
</compilation>
<httpRuntime targetFramework="4.5" />
</system.web>
<!-- Required for IIS 7.0 -->
<system.webServer>
<validation validateIntegratedModeConfiguration="false" />
<handlers>
<add path="*" name="ServiceStack.Factory" type="ServiceStack.HttpHandlerFactory, ServiceStack" verb="*" preCondition="integratedMode" resourceType="Unspecified" allowPathInfo="true" />
</handlers>
</system.webServer>
<appSettings>
<add key="webPages:Enabled" value="false" />
</appSettings>
<system.web.webPages.razor>
<host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<pages pageBaseType="ServiceStack.Razor.ViewPage">
<namespaces>
<add namespace="ServiceStack" />
<add namespace="ServiceStack.Html" />
<add namespace="ServiceStack.Razor" />
<add namespace="ServiceStack.Text" />
<add namespace="ServiceStack.OrmLite" />
<add namespace="SSTest" />
<add namespace="SSTest.Services" />
</namespaces>
</pages>
</system.web.webPages.razor>
</configuration>
答案 0 :(得分:2)
我知道mythz已经解决了你的问题,但还有其他东西可以检查同样问题的未来读者:
确保将*.cshtml
文件复制到输出目录。无论出于何种原因,我都没有,因此ServiceStack无法找到它们,而我得到的只是像你一样的快照。
我不确定这是否与使用自托管控制台应用程序而非网络项目有关。
答案 1 :(得分:1)
内部Configure()
插件应加载:
Plugins.Add(new RazorFormat());
在ServiceStack.Razor Layout = null
中,建议使用默认布局模板Views\_Layout.cshtml
,您可以选择不使用Layout=""
的任何模板。
如果您没有安装OrmLite,那么您希望通过从 Web.config 中删除 ServiceStack.OrmLite 命名空间,使其不被包含在所有Razor页面中:
<add namespace="ServiceStack.OrmLite" />
答案 2 :(得分:0)
您的观点应位于/Views/Home.cshtml
而不是/Views/Home/Home.cshtml
。
答案 3 :(得分:0)
我遇到了完全相同的问题!使用当前的 ServiceStack VS模板(截至2015年4月1日,并且这不是愚人节的笑话!),如果你&#39;以下行将会弄乱。重新运行自托管服务:
WebHostPhysicalPath = Path.GetFullPath(Path.Combine("~".MapServerPath(), "..", "..")),
这是在AppHost.cs
区块内Configure(Container)
功能内的SetConfig(new HostConfig { /* ... here ... */ } );
文件中。
注释掉整个WebHostPhysicalPath = ...
行并重新运行您的应用程序。
一个更好的解决方法,而不是简单地注释掉它是通过以下方式设置正确的目录,它是你的实际bin目录:
WebHostPhysicalPath = Path.GetFullPath("~".MapServerPath()),
或者,如果您有特定的构建体系结构(即x86或x64而不是AnyCPU),则可能有第三层文件夹。因此,将WebHostPhysicalPath更改为:
WebHostPhysicalPath = Path.GetFullPath(Path.Combine("~".MapServerPath(), "..", "..", "..")),