Razor webapi在控制器中将模型呈现为html

Razor webapi在控制器中将模型呈现为html,razor,asp.net-web-api,Razor,Asp.net Web Api,我有一个webapi控制器操作,可以创建html电子邮件。目前我正在使用string.format创建html,因为这是最简单的事情。我知道这将变得更加复杂的前进,并希望使用剃刀模板 我已经看到了如何为MVC控制器执行此操作的示例,但在WebApiController中找不到任何关于如何执行此操作的示例。这可能吗?如果是,你知道有什么资源吗?我的google fu让我失望。请查看Wouter de Kort的这篇文章 public static string RenderViewToStrin

我有一个webapi控制器操作,可以创建html电子邮件。目前我正在使用string.format创建html,因为这是最简单的事情。我知道这将变得更加复杂的前进,并希望使用剃刀模板

我已经看到了如何为MVC控制器执行此操作的示例,但在
WebApiController
中找不到任何关于如何执行此操作的示例。这可能吗?如果是,你知道有什么资源吗?我的google fu让我失望。

请查看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类:

可以这样称呼:

var html = ViewRenderer.RenderView("~/views/emails/ActivationEmail.cshtml", emailModel);

你看到这个问题了吗?Darin Dimitrov给出的答案很可能是你最好的选择。thanx@MarkJones为我指明了正确的方向。最后我还是和他一起去了。这只是实现起来有点简洁。如果视图是共享视图,应该发送什么控制器名称?有没有办法让它在ASP.NET Core 2.2中工作?