在WCF服务内部渲染Razor View

时间:2012-07-24 16:57:54

标签: asp.net-mvc wcf soap razor

这是一项非常奇怪的任务,但我无法改变要求。我们必须编写WCF服务(SOAP,而不是REST)并将HTML作为响应对象的属性返回。

我不想使用:

  • 硬编码字符串并使用string.Format()填写一些值;
  • t4模板,因为将来很多人都不能支持这种方法;
  • WebForm控件,因为我们的大多数开发人员都习惯使用MVC项目。

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

为此,我创建了MVC应用程序并添加了service.svc文件。服务工作正常 - 我可以调用其方法并获得结果。但是当我尝试渲染Razor View时,我的问题开始了。如果我只是创建任何控制器的实例然后调用一个动作,则控制器的属性ControllerContext为null,因此无法呈现View。我试着动手制作ControllerContext,但好像我错过了什么。

我发现了非常相似的问题here,但由于HttpContext.Current在wcf方法中为null,因此提供的解决方案对我无效。

有没有人知道如何实现这一目标?或者也许有人可以提出其他简单灵活的方法来在WCF方法中呈现HTML?

2 个答案:

答案 0 :(得分:2)

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

我使用Nancy按需生成HTML已经取得了相当大的成功 - 因为它被设计为本身可测试的,你可以很容易地将它作为模板框架滥用到自己的目的。

答案 1 :(得分:1)

您需要在应用中托管剃刀引擎。请看这篇文章Rendering ASP.NET MVC Views to String,尤其是“没有ControllerContext渲染”

部分

此外,在此答案Render a view as a string中可以找到更多信息。 (这是几个“正确”的答案,具有不同的背景)