You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让FluentEmail的RazorRenderer忽略未映射的模型属性?

解决方案

Razor解析器默认是强类型校验机制,访问模型中不存在的属性时会抛出RuntimeBinderException。针对你的需求,有两种实用方案可以避免报错:


方案一:用动态对象包装原始模型,拦截无效属性访问

创建一个继承DynamicObject的安全包装类,重写属性访问逻辑——当找不到对应属性时,返回空字符串(或保留原占位符文本),而非抛出异常。

代码实现

public class SafeModelWrapper : DynamicObject
{
    private readonly object _model;
    private readonly PropertyInfo[] _modelProperties;

    public SafeModelWrapper(object model)
    {
        _model = model;
        _modelProperties = model.GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance);
    }

    public override bool TryGetMember(GetMemberBinder binder, out object result)
    {
        // 查找匹配的属性(忽略大小写)
        var property = _modelProperties.FirstOrDefault(p => 
            string.Equals(p.Name, binder.Name, StringComparison.OrdinalIgnoreCase));
        
        if (property != null)
        {
            result = property.GetValue(_model) ?? string.Empty;
            return true;
        }

        // 找不到属性时返回空字符串,若要保留原占位符,可改为 result = $"@Model.{binder.Name}"
        result = string.Empty;
        return true;
    }
}

使用方式

将原始模型包装为动态对象后传入解析方法:

dynamic safeModel = new SafeModelWrapper(placeholderData);
var parsedContent = await razor.ParseAsync(emailContent, safeModel);

方案二:配置RazorLight引擎容忍缺失属性

FluentEmail的RazorRenderer底层依赖RazorLight,你可以自定义RazorLightEngine实例,开启AllowMissingProperties选项,让解析器访问不存在的属性时返回null而非报错。

代码实现

// 初始化带自定义配置的RazorLight引擎
var razorEngine = new RazorLightEngineBuilder()
    .UseMemoryCachingProvider()
    .SetOperatingAssembly(typeof(YourProjectClass).Assembly)
    .Configure(options =>
    {
        options.AllowMissingProperties = true;
    })
    .Build();

// 用自定义引擎创建RazorRenderer
var razorRenderer = new RazorRenderer(razorEngine);

// 正常解析即可,无效占位符会被替换为null
var parsedContent = await razorRenderer.ParseAsync(emailContent, placeholderData);

补充

如果不想显示null文本,可以在邮件模板中用Razor空合并运算符处理:

Thank you @(Model.FrstName ?? "") for submitting!

内容的提问来源于stack exchange,提问作者Paritosh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 06:55:28