可以使用ServiceStack提供HTML页面吗?
我正在评估ServiceStack以用于Windows服务以托管REST服务。 到目前为止,它非常出色,胜过WCF。 更不用说它更容易使用。
上面提到的Windows服务需要能够提供一个简单的HTML页面来充当“仪表板”。 ServiceStack当然会用于为仪表板提供json数据,但是如何为仪表板页面提供图像和js? 这可能吗? 我宁愿不主持全面的ASP.Net,并严格限制IIS永远不会在这些服务器上运行。 可伸缩性也不是必需的,因为只有一台管理员机器才会显示仪表板。
仅使用ServiceStack进行Web和Web服务
ServiceStack的新Razor View Engine支持
ServiceStack.Razor NuGet包在v3.9.11中添加了对ServiceStack的HTML故事的重大改进。 有了这个支持,ServiceStack现在可以毕业到一个完整的网站和Web服务框架,它提供了一个更简单的WCF,MVC和WebApi替代品。
在Razor Rockstars演示网站上维护完整的文档解释ServiceStack与Razor支持的新HTML故事:
解释Razor支持并描述其功能的完整文档在上面的链接中解释。
只是一个HTML格式的REST服务框架
HTML内容类型已经被添加到ServiceStack中,就像您期望从真正的REST服务框架中获得的一样,也就是说,您可以简单地添加Razor Views来增强您的现有服务,这些服务只会在客户端请求text/html
Content-键入(不影响现有的注册格式)。 例如,仍然可以在所有其他内容类型中访问此/ rockstars REST服务:
此外,如果您的服务具有[ClientCanSwapTemplates]
属性,则客户端可以在运行时交换页面的视图和模板,例如,上面的页面与上面的页面相同:
ServiceStack以这种方式自然地采用了HTML格式,这使得开发一套可以同时为HTML和丰富的本地移动和桌面客户端服务的服务变得微不足道。
其他服务HTML的方法
在添加Razor支持之前,有一些使用ServiceStack提供HTML页面的策略:
使用带有Ajax调用的静态html页面
如果您为现有文件发出Web请求,则会通过静态文件处理程序返回。 然后,您可以简单地将ajax json调用返回到您的Web服务来动态生成一个页面。
Windows Service AppHost Starter Template中的TODO Backbone应用程序以这种方式工作。 (以及ServiceStack中的大多数其他示例项目:-)
返回一个字符串
从Web服务返回的任何字符串都会直接写入响应流,因此您可以使用自己的HTML模板解决方案简单地返回HTML。
以下是ServiceStack中其他可能的返回类型列表以及它们的处理方式。
使用Markdown Razor
内置到ServiceStack中的视图引擎是Markdown Razor--受MVC的Razor启发,但使用Markdown语法。 它支持自定义基类和扩展方法/ utils,具有很强的扩展性。
使用Markdown Razor的一个很好的功能是您的web服务返回json,xml等也可以是在同一个url上动态生成html页面的视图模型。
一个这样的例子是类别的Web服务,你可以看到这里的结果:http://www.servicestack.net/docs/category/Framework
并再次以JSON,XML等方式提供相同的服务。您还可以检索部分生成的html页面(不包含模板)以及动态生成的降价。
该页面是使用发送到此MarkdownRazor视图的Web服务DTO /视图模型创建的。https://raw.github.com/ServiceStack/ServiceStack.Examples/master/src/Docs/Views/Category.md
如果您为Web服务指定了Markdown Razor页面,它将用于您现在看到的默认HTML5 JSON报告。
解析顺序ServiceStack用于解析用于呈现HTML输出的相应Markdown模板为:
主机ServiceStack在/ custompath
ServiceStack可以与现有的ASP.NET Web应用程序一起使用或不使用。 如果您的应用程序具有HTML和REST-Services-light,那么通常的做法是将ServiceStack托管在/ custompath(例如/ api),以便您可以将ASP.NET用于所有HTML页面生成。
如果使用ASP.NET MVC,则需要忽略MVC的Global.asax RegisterRoutes()中的路由:
routes.IgnoreRoute ("servicestack/{*pathInfo}");
链接地址: http://www.djcxy.com/p/20503.html