是否可以使用ServiceStack提供HTML页面?

时间:2011-11-20 04:37:07

标签: servicestack

我正在评估ServiceStack在Windows服务中用于托管REST服务。到目前为止,它非常出色并且优于WCF。更不用说它更容易使用。

上面提到的Windows服务需要能够提供一个简单的HTML页面作为“仪表板”。 ServiceStack当然会用于为仪表板提供json数据,但是提供仪表板页面以及图像和js呢?这可能吗?我宁愿不主持完整的ASP.Net,并且严格限制IIS永远不会在这些服务器上运行。可扩展性也不是必需的,因为只有一个管理员机器会显示仪表板。

2 个答案:

答案 0 :(得分:55)

仅使用ServiceStack进行Web和Web服务

ServiceStack的新Razor View Engine支持

ServiceStack.Razor NuGet package v3.9.11 中添加了ServiceStack HTML故事的重大改进。有了这种支持,ServiceStack现在毕业于完整的网站和Web服务框架,为WCF,MVC和WebApi提供了更简单的替代。

使用Razor支持解释ServiceStack新HTML故事的完整文档在Razor Rockstars演示网站中进行了维护:

上面的链接解释了解释Razor支持和描述其功能的完整文档。

只是一个HTML格式的REST服务框架

HTML Content-Type已添加到ServiceStack,正如您对真正的REST服务框架所期望的那样,即您只需添加Razor Views即可增强现有服务,这些服务仅在客户端请求{{{ 1}} Content-Type(对现有注册格式没有影响)。例如。仍可以在所有其他内容类型中访问此/rockstars REST服务:

此外,如果您的服务具有text/html属性,则客户端可以在运行时交换页面的视图和模板,例如这是与上面相同的页面:

ServiceStack以这种方式自然采用HTML格式,这使得开发一组可以同时为HTML和本机移动和桌面客户端提供服务的服务变得微不足道。

提供HTML的其他方式

在添加Razor支持之前,有几种使用ServiceStack提供HTML页面的策略:

使用带有ajax调用的静态html页面

如果您对现有文件发出Web请求,则会使用静态文件处理程序返回该请求。然后,您可以简单地将ajax json调用回您的Web服务以动态生成页面。

Windows Service AppHost Starter Template中的TODO Backbone应用程序以这种方式工作。 (以及ServiceStack中的大多数其他示例项目: - )

返回一个字符串

从您的网络服务返回的任何字符串会直接按原样直接写入响应流,因此您只需使用自己的html模板解决方案返回html即可。

以下是ServiceStack中other possible return types的列表以及它们的处理方式。

使用Markdown Razor

ServiceStack中内置的视图引擎是Markdown Razor - 这是受MVC的Razor启发但使用Markdown语法。它非常可扩展,支持自定义基类和扩展方法/ utils。

使用Markdown Razor的一个很好的功能是返回json,xml等的同一个Web服务也可以是同一网址上动态生成的html页面的视图模型。

这方面的一个例子是category web service,你可以看到这里的结果: http://www.servicestack.net/docs/category/Framework

以及JSONXML等中的同一服务。您还可以检索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模板的解析顺序是:

  • 如果Web服务指定了一个模板(通过自定义的IHttpResult.TemplateName响应) - 那么具有该名称的视图。
  • 与Response DTO同名的视图,首先在/ Views中查看/ Views / Shared
  • 与请求DTO同名的视图,首先在/ Views中查看/ Views / Shared

/ custompath中的主机ServiceStack

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页面,就像需要的原始海报一样。