RazorEngine WebApiTemplateBase @Url.Content()
RazorEngine WebApiTemplateBase @Url.Content()
当从 ASP.NET Web API 使用 RazorEngine 时,如何让 @Url.Content()
在我的 _Layout.cshtml
中工作?
RazorEngine (v.3.7.2) 仅处理 Razor 语法,而不处理其他辅助方法,如 @Html
或 @Url
。这些可以通过扩展 TemplateBase<>
并在配置中设置来添加。
一些老问题中有代码示例:#26, #29; in an unreleased, incomplete piece of code in MvcTemplateBase.cs; and in the documentation for Extending the Template Syntax。
我的问题是我使用的 ASP.NET Web API (v.1) 没有 HttpContext.Current
(也不应该)。我想提供一个 UrlHelper
,因为我想使用它的 Content()
方法,但它需要用 HttpRequestMessage
实例化,这将不可用。
可能无法为我的编译布局获取@Url 辅助方法。也许我需要一些其他方式从虚拟路径获取绝对路径。看来我仍然需要一些方法来检查请求。
实现此功能的一种方法是遵循 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<>
的扩展设置 TemplateService 配置。
var config =
new RazorEngine.Configuration.TemplateServiceConfiguration
{
TemplateManager = new TemplateManager(),
BaseTemplateType = typeof(WebApiTemplateBase<>)
};
当从 ASP.NET Web API 使用 RazorEngine 时,如何让 @Url.Content()
在我的 _Layout.cshtml
中工作?
RazorEngine (v.3.7.2) 仅处理 Razor 语法,而不处理其他辅助方法,如 @Html
或 @Url
。这些可以通过扩展 TemplateBase<>
并在配置中设置来添加。
一些老问题中有代码示例:#26, #29; in an unreleased, incomplete piece of code in MvcTemplateBase.cs; and in the documentation for Extending the Template Syntax。
我的问题是我使用的 ASP.NET Web API (v.1) 没有 HttpContext.Current
(也不应该)。我想提供一个 UrlHelper
,因为我想使用它的 Content()
方法,但它需要用 HttpRequestMessage
实例化,这将不可用。
可能无法为我的编译布局获取@Url 辅助方法。也许我需要一些其他方式从虚拟路径获取绝对路径。看来我仍然需要一些方法来检查请求。
实现此功能的一种方法是遵循 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<>
的扩展设置 TemplateService 配置。
var config =
new RazorEngine.Configuration.TemplateServiceConfiguration
{
TemplateManager = new TemplateManager(),
BaseTemplateType = typeof(WebApiTemplateBase<>)
};