我有一个多年的ServiceStack项目,它为传统的Winforms应用程序以及更新的html / css / javascript网站提供服务。我现在需要为这些应用程序提供一些预先格式化的视图(特别是当我们添加Xamarin移动平台时),看起来Servicestack.Razor似乎是合乎逻辑的方式。
我不确定将Razor添加到现有项目的最佳方式,而不是重新开始使用新项目。我可以自己添加必要的视图文件夹,引用和web.config元素吗?
此外,仍然提供服务的标准URL约定是什么(可从上述应用程序调用),但现在添加该服务的视图?这是一条新路线吗?
答案 0 :(得分:2)
您可以通过添加所需的config sections to your Web.config将Razor添加到现有的ServiceStack Web App:
<configuration>
<configSections>
<sectionGroup name="system.web.webPages.razor" type="System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
<section name="host" type="System.Web.WebPages.Razor.Configuration.HostSection, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false"/>
<section name="pages" type="System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false"/>
</sectionGroup>
</configSections>
<appSettings>
<add key="webPages:Enabled" value="false" />
</appSettings>
<system.web.webPages.razor>
<host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
<pages pageBaseType="ServiceStack.Razor.ViewPage">
<namespaces>
<add namespace="System" />
<add namespace="System.Linq" />
<add namespace="ServiceStack" />
<add namespace="ServiceStack.Html" />
<add namespace="ServiceStack.Razor" />
<add namespace="ServiceStack.Text" />
<add namespace="ServiceStack.OrmLite" />
<add namespace="ProjectNamespace" />
<add namespace="ProjectNamespace.ServiceModel" />
</namespaces>
</pages>
</system.web.webPages.razor>
</configuration>
然后安装ServiceStack.Razor包:
PM> Install-Package ServiceStack.Razor
这将配置您的项目以启用ServiceStack's Razor support。从那里,您可以通过在请求或响应DTO之后命名为您的服务添加视图,例如:
/Views
RequestDto.cshtml
/Shared
_Layout.cshtml
由于它是现有服务的视图模型,@model
将用于您的服务响应DTO。
如果一切配置正确,从浏览器(或任何带有Accept: text/html
的HTTP请求)调用现有服务将返回视图中的输出,而不是ServiceStack的built-in auto HTML output。