代码之家  ›  专栏  ›  技术社区  ›  Captain Stack

如何使用RazoEngine将System.Text.RegularExpressions添加到模板中?

  •  1
  • Captain Stack  · 技术社区  · 6 年前

    我正在使用RazoEngine呈现HTML电子邮件,希望包含助手功能。其中一个使用regex:

    // template.cshtml
    @using System.Text.RegularExpressions
    
    @functions {
      public string FixImageUrlParam(string url, int width, int height)
      {
        Regex widthParam = new Regex("w=[0-9]*");
        Regex heightParam = new Regex("h=[0-9]*");
    
        url = widthParam.Replace(url, $"w={width}");
        url = heightParam.Replace(url, $"h={height}");
    
        return url;
      }
    }
    

    这是我的配置/呈现逻辑。

    // renderer.cs
    public static string RenderTemplate(string template, string dataModel)
    {
        TemplateServiceConfiguration config = new TemplateServiceConfiguration();
        config.Namespaces.Add("System.Text.RegularExpressions");
        Engine.Razor = RazorEngineService.Create(config); ;
    
    
        Engine.Razor.AddTemplate("template", File.ReadAllText("template.cshtml"));
        Engine.Razor.Compile("template", null);
        return = Engine.Razor.Run("template", null, JsonConvert.DeserializeObject<ExpandoObject>(File.ReadAllText("data.json")));
    }
    

    问题是,当razorence尝试渲染时,helper函数会导致错误。我已经将错误隔离到使用regex名称空间的行中。

    Errors while compiling a Template.
    Please try the following to solve the situation:  
      * If the problem is about missing references either try to load the missing references manually (in the compiling appdomain!) or
        Specify your references manually by providing your own IReferenceResolver implementation.
        Currently all references have to be available as files!
      * If you get 'class' does not contain a definition for 'member': 
            try another modelType (for example 'null' or 'typeof(DynamicObject)' to make the model dynamic).
            NOTE: You CANNOT use typeof(dynamic)!
        Or try to use static instead of anonymous/dynamic types.
    More details about the error:
     - error: (862, 35) Unexpected character '$'
    \t - error: (863, 36) Unexpected character '$'
    Temporary files of the compilation can be found in (please delete the folder): C:\\Users\\anstackh\\AppData\\Local\\Temp\\RazorEngine_3gknk4fd.poe
    
    1 回复  |  直到 6 年前
        1
  •  3
  •   Theodore Tsirpanis JaredPar    6 年前

    // template.cshtml
    @using System.Text.RegularExpressions
    
    @functions {
      public string FixImageUrlParam(string url, int width, int height)
      {
        Regex widthParam = new Regex("w=[0-9]*");
        Regex heightParam = new Regex("h=[0-9]*");
    
        url = widthParam.Replace(url, "w=" + width.ToString());
        url = heightParam.Replace(url, "h=" + height.ToString());
    
        return url;
      }
    }