我正在评估ServiceStack在Windows服务中用于托管REST服务。到目前为止,它非常出色并且优于WCF。更不用说它更容易使用。
上面提到的Windows服务需要能够提供一个简单的HTML页面作为“仪表板”。 ServiceStack当然会用于为仪表板提供json数据,但是提供仪表板页面以及图像和js呢?这可能吗?我宁愿不主持完整的ASP.Net,并且严格限制IIS永远不会在这些服务器上运行。可扩展性也不是必需的,因为只有一个管理员机器会显示仪表板。
答案 0 :(得分:55)
在ServiceStack.Razor NuGet package的 v3.9.11 中添加了ServiceStack HTML故事的重大改进。有了这种支持,ServiceStack现在毕业于完整的网站和Web服务框架,为WCF,MVC和WebApi提供了更简单的替代。
使用Razor支持解释ServiceStack新HTML故事的完整文档在Razor Rockstars演示网站中进行了维护:
上面的链接解释了解释Razor支持和描述其功能的完整文档。
HTML Content-Type已添加到ServiceStack,正如您对真正的REST服务框架所期望的那样,即您只需添加Razor Views即可增强现有服务,这些服务仅在客户端请求{{{ 1}} Content-Type(对现有注册格式没有影响)。例如。仍可以在所有其他内容类型中访问此/rockstars REST服务:
此外,如果您的服务具有text/html
属性,则客户端可以在运行时交换页面的视图和模板,例如这是与上面相同的页面:
ServiceStack以这种方式自然采用HTML格式,这使得开发一组可以同时为HTML和本机移动和桌面客户端提供服务的服务变得微不足道。
在添加Razor支持之前,有几种使用ServiceStack提供HTML页面的策略:
如果您对现有文件发出Web请求,则会使用静态文件处理程序返回该请求。然后,您可以简单地将ajax json调用回您的Web服务以动态生成页面。
Windows Service AppHost Starter Template中的TODO Backbone应用程序以这种方式工作。 (以及ServiceStack中的大多数其他示例项目: - )
从您的网络服务返回的任何字符串会直接按原样直接写入响应流,因此您只需使用自己的html模板解决方案返回html即可。
以下是ServiceStack中other possible return types的列表以及它们的处理方式。
ServiceStack中内置的视图引擎是Markdown Razor - 这是受MVC的Razor启发但使用Markdown语法。它非常可扩展,支持自定义基类和扩展方法/ utils。
使用Markdown Razor的一个很好的功能是返回json,xml等的同一个Web服务也可以是同一网址上动态生成的html页面的视图模型。
这方面的一个例子是category web service,你可以看到这里的结果: http://www.servicestack.net/docs/category/Framework
以及JSON,XML等中的同一服务。您还可以检索partially generated html page(不包含模板)以及dynamically generated markdown。
该页面是使用发送到此MarkdownRazor View的Web服务DTO /视图模型创建的 https://raw.github.com/ServiceStack/ServiceStack.Examples/master/src/Docs/Views/Category.md
如果您为网络服务指定了Markdown Razor页面,则会使用您现在看到的默认HTML5 JSON Report。
ServiceStack用于解析用于呈现HTML输出的相应Markdown模板的解析顺序是:
ServiceStack可与或不与现有的ASP.NET Web应用程序一起使用。如果您的应用程序 HTML-heavy 且 REST-Services-light ,常见的方法是在/custompath(例如/ api)托管ServiceStack,以便您可以使用用于生成所有HTML页面的ASP.NET。
如果使用ASP.NET MVC,则需要忽略MVC的Global.asax RegisterRoutes()中的路由:
[ClientCanSwapTemplates]
答案 1 :(得分:0)
如果您使用最新的ServiceStack(5.8.0)在.net核心中尝试此操作,并使用ServiceStack.Kestrel进行自托管的Kestrel实现,就像我以前所做的那样,提供的答案将无效。 Razor软件包不喜欢此版本的ServiceStack,并且需要5.0.0二进制文件。
但是,路由页面提供了答案: https://docs.servicestack.net/routing
示例:
[Route("/hello/world","GET")]
public class HelloWorld{}
public class GreetingService : Service {
public HttpResult Get(HelloWorld request)
{
return new HttpResult(VirtualFileSources.GetFile("HelloWorld.html"));
}
}
这花了我很长时间才发现,所以希望这种回应可以减轻某人的痛苦。
请注意,这仅允许您返回html页面,而不是Razor页面,就像需要的原始海报一样。