Handlebars.Net 使用本地文件路径

Handlebars.Net with local File path

我有一个配置值,代表一个文件夹,其中一些文件可供下载。该值是车把模板:

"D:\{{identifier1}}\{{identifier2}}\SomeFolder\{{version}}"

此值由我们的部署服务器根据环境设置。

问题是,当我 运行 模板通过时是这样的:

var template = Handlebars.Compile(_configuration.FilePathFormat);

        return template(new
        {
            identifier1 = 123,
            identifier2 = 456,
            version = "latest"
        });

我得到的结果是这样的:

R:{{identifier1}}{{identifier2}}\SomeFolder{{version}}

我的期望:

R:36\SomeFolder\latest

出于某种原因,它正在脱离车把,我不希望那样。我一直无法找到有关禁用转义字符的任何信息,并且没有多少斜杠可以正确呈现模板。

此外,如果我在斜杠和车把占位符之间放置一个 space,它会正确编译和呈现,但文件路径中会有一个 space。

我找到了 site that let me test handlebars.js,但它的行为与 handlebars.net

不同

更新:已在 Handlebars.net

中修复

Sice 1.9.3 版本,在我报告错误后立即发布,现在可以正常使用了。对于 Handlebars.Net,您必须将模板中的斜杠加倍以转义它们,与 Handlebars.js、

相同
var templateText = @"D:\{{identifier1}}\{{identifier2}}\SomeFolder\{{version}}";
var compiledTemplate = Handlebars.Compile(templateText);

var path = compiledTemplate(new
{
    identifier1 = 123,
    identifier2 = 456,
    version = "latest"
});

原回答: 是的,似乎 Handlebars.net 对转义字符有一些奇怪的处理。

最简单的解决方法是只反转模板字符串中的斜杠。

var templateText = @"D:/{{identifier1}}/{{identifier2}}/SomeFolder/{{version}}";
var compiledTemplate = Handlebars.Compile(templateText);

var pathWithInvertedSlashes = compiledTemplate(new
{
    identifier1 = 123,
    identifier2 = 456,
    version = "latest"
});
// Inverted slashes normally work fine on Windows, but if you want to
// 'fix' them you can always do
var canonicalPath = Path.GetFullPath(pathWithInvertedSlashes);