У меня есть значение конфигурации, представляющее папку, в которой некоторые файлы доступны для загрузки. Это значение является шаблоном руля:
"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
По какой-то причине он ускользает от руля, а я этого не хочу. Мне не удалось найти ничего об отключении escape-символов, и никакие косые черты не помогли правильно отобразить шаблон.
Кроме того, если я поставлю пробел между косой чертой и заполнителем руля, он компилируется и отображается правильно, но тогда в пути к файлу будет пробел.
Я нашел сайт, который позволил мне протестировать 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 есть странная обработка escape-символов.
Самый простой обходной путь - просто инвертировать косую черту в строке шаблона.
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);
Я начал по этому пути (заставляя \ to /), но надеялся, что что-то упустил. Спасибо за помощь!
Handlebars.net имеет фиксированный просмотр вперед, когда встречает обратную косую черту. Я сообщил об ошибке на github.com/rexm/Handlebars.Net/issues/247
Эта ошибка исправлена в последней версии Handlebars.Net. Спасибо, что подняли его!
Это была ошибка в Handlebars.Net, которая теперь исправлена.