Web Api 控制器可以将视图渲染为字符串吗?

M K*_* II 0 asp.net-web-api

我想编写一个 Web Api 控制器操作,根据结果发送电子邮件。我想使用带有数据模型的 MVC 视图或部分视图来呈现电子邮件正文。

有没有办法做到这一点?

我想要这样的东西:

public class NotificationApiController : ApiController
{
    private IMkpContext db;

    public string ViewNotifications()
    {
        var dataModel = GetDataModel();
        if (dataModel != null) 
        {
            SendEmail(dataModel.ToAddress, dataModel.FromAddress, dataModel.Subject, RenderBody("viewName", dataModel);
        }

        return string.Empty;
    }
}
Run Code Online (Sandbox Code Playgroud)

其中 RenderBody 将查找 viewName,用 dataModel 中的数据填充它,并将 View 呈现为字符串。

pec*_*eco 8

如果您不想使用评论中建议的 RazorEngine 方法,您可以定义一个类,如下所示:

\n\n
public static class ViewUtil\n{\n    public static string RenderPartial(string partialName, object model)\n    {\n        var sw = new StringWriter();\n        var httpContext = new HttpContextWrapper(HttpContext.Current);\n\n        // point to an empty controller\n        var routeData = new RouteData();\n        routeData.Values.Add("controller", "EmptyController");\n\n        var controllerContext = new ControllerContext(new RequestContext(httpContext, routeData), new EmptyController());\n\n        var view = ViewEngines.Engines.FindPartialView(controllerContext, partialName).View;\n\n        view.Render(new ViewContext(controllerContext, view, new ViewDataDictionary { Model = model }, new TempDataDictionary(), sw), sw);\n\n        return sw.ToString();\n    }\n}\n\nclass EmptyController : Controller { }\n
Run Code Online (Sandbox Code Playgroud)\n