我有一个带有Emails项目的应用程序,该项目公开了一个类,可以使用IRazorViewEngine编译电子邮件模板并发送它。
但是,它在几个不同的项目中使用,默认情况下,RazorViewEngine似乎只在相关Web项目的Views文件夹中查找。这意味着我必须在项目之间重复相同的视图。
我已经研究过扩展RazorViewEngine来修改其查找视图的位置,但是每个示例都会更改其查找项目中的哪个文件夹,而不是哪个项目,并且通过快速查看RazorViewEngine源,它明确希望在应用程序本地路径(即以“〜”或“ /”开头),阻碍了我幼稚的尝试使用绝对路径或以“ ../”开头的路径。
有没有一种方法可以确保RazorViewEngine(或子类)检查特定的(非动态)项目,而不是Web项目调用它?
该应用程序使用的是.Net Core 1.1,RazorEngine似乎不支持
最佳答案
我在控制器中将Views作为文件读取,并将使用该字符串进行razor编译。
控制器:
_emailBuilder = new RazorHtmlBuilder();
var tempatePath =
HttpContext.Current.Server.MapPath("~/Views/Mail/HelloFriend.cshtml");
string template = File.ReadAllText(tempatePath);
var body = _emailBuilder.BuildEmail("someUniqueId", template , new Friend() {Name: "John"});
使用razor engine在上下文(不同项目)之外的Razor Email Builder
using System;
using RazorEngine;
using RazorEngine.Templating;
namespace Project.ServiceLayer.Helpers.EmailBuilder
{
public class RazorHtmlBuilder
{
public string BuildEmail<T>(string templateName, string template, T model)
{
try
{
return Engine.Razor.RunCompile(template, templateName, typeof (T), model);
}
catch (Exception ex)
{
//log error
}
}
}
关于c# - 更改RazorViewEngine以在特定项目(.Net Core)中查找 View ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44263642/