【问题标题】:RazorEngine WebApiTemplateBase @Url.Content()RazorEngine WebApiTemplateBase @Url.Content()
【发布时间】:2015-09-08 14:55:29
【问题描述】:

当从 ASP.NET Web API 使用 RazorEngine 时,如何让 @Url.Content() 在我的 _Layout.cshtml 中工作?

RazorEngine (v.3.7.2) 仅处理 Razor 语法,而不处理 @Html@Url 等其他辅助方法。这些可以通过扩展TemplateBase<> 并在配置中设置来添加。

一些老issue中有代码示例:#26,#29;在MvcTemplateBase.cs 中的一段未发布的、不完整的代码中;在Extending the Template Syntax 的文档中。

我的问题是我正在使用 ASP.NET Web API (v.1),它没有 HttpContext.Current(也不应该)。我想提供一个UrlHelper,因为我想使用它的Content() 方法,但它需要用HttpRequestMessage 实例化,这将不可用。

也许没有办法为我的编译布局获取@Url 辅助方法。也许我需要其他一些方法来从虚拟路径中获取绝对路径。看来我仍然需要某种方式来检查请求。

【问题讨论】:

    标签: asp.net-web-api razorengine


    【解决方案1】:

    实现此功能的一种方法是遵循Extending the Template Syntax 设置的方向并在辅助方法中使用VirtualPathUtility.ToAbsolute()

    using System.Web;
    using RazorEngine.Templating;
    
    namespace MyNamespace.Web
    {
        public abstract class WebApiTemplateBase<T> : TemplateBase<T>
        {
            protected WebApiTemplateBase()
            {
                Url = new UrlHelper();
            }
    
            public UrlHelper Url;
        }
    
        public class UrlHelper
        {
            public string Content(string content)
            {
                return VirtualPathUtility.ToAbsolute(content);
            }
        }
    }
    

    使用TemplateBase&lt;&gt; 的此扩展名设置 TemplateService 配置。

    var config =
        new RazorEngine.Configuration.TemplateServiceConfiguration
        {
            TemplateManager = new TemplateManager(),
            BaseTemplateType = typeof(WebApiTemplateBase<>)
        };
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-07-09
      • 2023-04-05
      • 1970-01-01
      • 1970-01-01
      • 2023-03-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多