Bog*_*gin 2 asp.net-web-api razorengine
当从 ASP.NET Web API 使用 RazorEngine 时@Url.Content(),我如何开始工作_Layout.cshtml?
RazorEngine (v.3.7.2) 只处理 Razor 语法,而不处理额外的辅助方法,如@Html或@Url。这些可以通过TemplateBase<>在配置中扩展和设置来添加。
一些老问题中有代码示例:#26 , #29;在MvcTemplateBase.cs 中未发布的、不完整的一段代码中;并在扩展模板语法的文档中。
我的问题是我使用的 ASP.NET Web API (v.1) 没有HttpContext.Current(也不应该)。我想提供一个,UrlHelper因为我想使用它的Content()方法,但它需要用不可用的 实例化HttpRequestMessage。
也许没有办法为我的编译布局获取 @Url 辅助方法。也许我需要一些其他方式从虚拟路径获取绝对路径。看来我仍然需要某种方式来检查请求。
实现此功能的一种方法是遵循通过扩展模板语法设置的方向并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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
使用TemplateBase<>.
var config =
new RazorEngine.Configuration.TemplateServiceConfiguration
{
TemplateManager = new TemplateManager(),
BaseTemplateType = typeof(WebApiTemplateBase<>)
};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
839 次 |
| 最近记录: |