Asp.net web api RazorEngine WebApiTemplateBase@Url.Content()

Asp.net web api RazorEngine WebApiTemplateBase@Url.Content(),asp.net-web-api,razorengine,Asp.net Web Api,Razorengine,从ASP.NET Web API使用RazorEngine时,如何使@Url.Content()在我的\u Layout.cshtml中工作 (v.3.7.2)只处理Razor语法,而不处理附加的辅助方法,如@Html或@Url。可以通过扩展TemplateBase并在配置中进行设置来添加这些 在一些旧版本中有代码示例:;在中未发布、不完整的代码段中;和的文档中 我的问题是我使用的是ASP.NET Web API(v.1),它不会有当前的HttpContext.Current(也不应该有)。我想

从ASP.NET Web API使用RazorEngine时,如何使
@Url.Content()
在我的
\u Layout.cshtml
中工作

(v.3.7.2)只处理Razor语法,而不处理附加的辅助方法,如
@Html
@Url
。可以通过扩展
TemplateBase
并在配置中进行设置来添加这些

在一些旧版本中有代码示例:;在中未发布、不完整的代码段中;和的文档中

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


也许没有办法为我编译的布局获取@Url帮助器方法。也许我需要从虚拟路径得到绝对路径的其他方法。不过,我似乎仍然需要某种方法来检查请求。

实现此功能的一种方法是遵循所设置的方向,并在助手方法中使用
virtualPath实用性.ToAbsolute()

使用System.Web;
使用RazorEngine.模板;
名称空间MyNamespace.Web
{
公共抽象类WebApiTemplateBase:TemplateBase
{
受保护的WebApiTemplateBase()
{
Url=新的UrlHelper();
}
公共Url帮助器Url;
}
公共类UrlHelper
{
公共字符串内容(字符串内容)
{
返回VirtualPathUtility.ToAbsolute(内容);
}
}
}
使用
TemplateBase
的此扩展设置TemplateService配置

var配置=
新的RazorEngine.Configuration.TemplateServiceConfiguration
{
TemplateManager=新建TemplateManager(),
BaseTemplateType=typeof(WebApiTemplateBase)
};