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

Razor.Parse替代方案咨询:无模板解析变量值的实现方式

替代过时的Razor.Parse,用Engine.Razor直接解析变量值

没问题,我之前也踩过Razor.Parse过时的坑,现在给你捋清楚怎么用Engine.Razor来替代它,不用搞复杂的模板:

首先,你得先确认安装了适配的NuGet包:

  • 如果你用.NET Framework,直接装RazorEngine包就行
  • 要是用.NET Core/.NET 5+,建议装RazorEngine.NetCore(专门适配新框架的版本)

虽然Engine.Razor没有直接的无模板重载,但我们可以用极简模板模拟原来的Razor.Parse行为——说白了就是把你要解析的变量字符串当作模板内容来处理。

直接解析单个变量的示例

你原来的代码是:

string value = Razor.Parse("@UserSession.NumberOfPeople");

现在可以改成这样:

// 把要解析的变量当作模板内容
var template = "@UserSession.NumberOfPeople";
// 用RunCompile执行,需要传入缓存键、模型(把变量上下文传进去)
var result = Engine.Razor.RunCompile(
    template, 
    "parse_people_count", // 唯一缓存键,避免重复编译,也可以用Guid生成
    null, 
    new { UserSession = UserSession } // 把需要的变量包装成模型对象
);

封装成类似Parse的便捷方法

要是想更贴近原来的用法,你可以自己封装一个扩展方法:

public static class RazorHelper
{
    public static string Parse(this string razorContent, object model)
    {
        // 生成唯一缓存键,也可以用固定键(如果内容不变的话)
        var cacheKey = Guid.NewGuid().ToString();
        return Engine.Razor.RunCompile(razorContent, cacheKey, null, model);
    }
}

之后调用就和原来几乎一样了:

string value = "@UserSession.NumberOfPeople".Parse(new { UserSession = UserSession });

注意事项

  • 确保Engine.Razor已初始化:大部分新版本会自动初始化,要是遇到异常,可以在启动时手动加一句Engine.Razor = RazorEngineService.Create();
  • 变量上下文要传对:原来的@UserSession是当前代码上下文的变量,现在必须把它作为模型的一部分传给模板,不然模板会找不到这个变量
  • 缓存键的使用:如果多次解析相同内容,用固定的缓存键能提升性能,避免重复编译模板

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:51:28