我有一个配置值,表示一个文件夹,其中有一些文件可供下载。这个值是一个车把模板:
"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不同
发布于 2018-05-01 17:42:55
更新: Handlebars.net中的修正
Sice版本1.9.3,在我报告了bug之后发布,现在运行正常。必须加倍模板中的斜杠才能将它们转义到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);https://stackoverflow.com/questions/50121053
复制相似问题