我有一个创建 html 电子邮件的 webapi 控制器操作。目前我正在使用 string.format 来创建 html,因为它是最简单的事情。我知道这会变得更加复杂,并且想使用剃刀模板。
我已经看到了如何为 MVC 控制器执行此操作的示例,但我找不到任何关于如何在WebApiController
. 这可能吗?如果是这样,您知道任何资源吗?我的 google-fu 让我失望了。
我有一个创建 html 电子邮件的 webapi 控制器操作。目前我正在使用 string.format 来创建 html,因为它是最简单的事情。我知道这会变得更加复杂,并且想使用剃刀模板。
我已经看到了如何为 MVC 控制器执行此操作的示例,但我找不到任何关于如何在WebApiController
. 这可能吗?如果是这样,您知道任何资源吗?我的 google-fu 让我失望了。
查看这篇文章将 ASP.NET MVC 视图渲染到 Web Api 控制器中的字符串,作者 Wouter de Kort
public static string RenderViewToString(string controllerName, string viewName,
object viewData)
{
HttpContextBase contextBase = new HttpContextWrapper(HttpContext.Current);
var routeData = new RouteData();
routeData.Values.Add("controller", controllerName);
var controllerContext = new ControllerContext(contextBase, routeData,
new EmptyController());
var razorViewEngine = new RazorViewEngine();
var razorViewResult = razorViewEngine.FindView(controllerContext, viewName,
"", false);
var writer = new StringWriter();
var viewContext = new ViewContext(controllerContext, razorViewResult.View,
new ViewDataDictionary(viewData), new TempDataDictionary(), writer);
razorViewResult.View.Render(viewContext, writer);
return writer.ToString();
}
private class EmptyController : ControllerBase
{
protected override void ExecuteCore() { }
}
//You can simply call this from anywhere in your Web Api Controller:
RenderViewToString("controller", "view", model)
我一直在使用这个 ViewRenderer 类并取得了巨大的成功:
https://github.com/RickStrahl/WestwindToolkit/blob/master/Westwind.Web.Mvc/Utils/ViewRenderer.cs
像这样称呼它:
var html = ViewRenderer.RenderView("~/views/emails/ActivationEmail.cshtml", emailModel);