2012-07-24 58 views
3

这是一个很奇怪的任务,但我无法改变需求。我们必须编写一个WCF服务(SOAP,而不是REST)并返回一个HTML作为响应对象的属性。渲染剃须刀查看WCF服务内部

我不想使用:

  • 硬编码字符串和使用的String.format()填写某些值;
  • t4模板由于没有多少人可以在将来支持这种方法;
  • WebForm控件,因为我们大多数开发人员都习惯于使用MVC项目。

我已经知道如何渲染一些ActionResult字符串。所以,理想情况下,我希望能够创建一个控制器,调用一些操作并获得一个ActionResult。

为此,我创建了MVC应用程序并向其添加了service.svc文件。服务工作正常 - 我可以调用它的方法并获得结果。但是当我尝试渲染Razor View时,我的问题就开始了。如果我简单地创建任何控制器的实例,然后调用一个动作,则控制器的属性ControllerContext为null,因此View无法呈现。我试图在即时创建ControllerContext,但似乎我失去了一些东西。

我发现非常类似的问题here,但提供的解决方案并不适合我,因为HttpContext.Current在wcf方法内为null。

是否有任何机构知道如何实现这一目标?或者,也许有人可以建议其他简单而灵活的方式来呈现WCF方法内的HTML?

回答

1

您将需要在您的应用程序中托管Razor引擎。看这篇文章Rendering ASP.NET MVC Views to String,尤其是部分“渲染没有ControllerContext”

此外,很多更多信息,可以在这个答案Render a view as a string被发现。 (这是几个“正确的”答案,有不同的上下文)

2

你应该看看Nancy框架(http://nancyfx.org),因为它们的RazorEngine实现更加轻量。

我使用Nancy按需生成HTML的成功率相当可观 - 因为它被设计为天生可测试的,您可以很容易地将它作为模板框架滥用到您自己的目的。