4

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

我不想使用:

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

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

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

我在这里发现了非常相似的问题,但是那里提供的解决方案对我不起作用,因为 HttpContext.Current 在 wcf 方法中为 null。

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

4

2 回答 2

2

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

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

于 2012-07-27T15:45:43.160 回答
1

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

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

于 2012-07-26T15:11:33.820 回答