ServiceStack不呈现Razor视图。刚看到快照。配置错了?

时间:2014-03-02 22:01:30

标签: razor servicestack

注意:这个问题虽然类似to this one,但它涉及不同的问题。

似乎无论出于何种原因,ServiceStack都没有运行/编译Razor视图,看起来像配置问题,但是RazorRockstarts运行正常。

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

  1. 在VS2013中,我创建了一个新的ASP.NET网站(空)
  2. Install-Package ServiceStack
  3. 安装包ServiceStack.Razor
  4. 将httpHandlers添加到web.config
  5. 在Global.asax Application_Start。
  6. 中创建了AppHost和.Init()
  7. AppHost.LoadPlugin(new RazorFormat());
  8. 创建/Services/HomeService.cs(继承自ServiceStack.Service)
  9. 在HomeService中创建家庭路线
  10. 创建/Views/Home/Home.cshtml
  11. 我在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>
    

4 个答案:

答案 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(), "..", "..", "..")),