1

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

"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:\123\456\SomeFolder\latest

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

此外,如果我在斜线和车把占位符之间放置一个空格,它会正确编译和渲染,但它在文件路径中有一个空格。

我找到了一个让我测试 handlebars.js 的网站,但它的行为与 handlebars.net 不同

4

1 回答 1

1

更新:已在 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);
于 2018-05-01T17:42:55.463 回答