HTML-шаблон не загружается: не удалось найти часть пути '/Helpers/Email/Templates/template.html' - PullRequest
0 голосов
/ 14 февраля 2019

Я работаю с .Net Core 2.1 Web Api.

Я использую 4 проекта для этого решения.Я пытаюсь загрузить HTML-шаблон, локально работает нормально, но как только я нажимаю на него на сервере Linux, файл не может быть загружен из-за этой ошибки:

HTML-шаблон не загружается: Не удалосьнайти часть пути '/Helpers/Email/Templates/template.html'

Структура решения следующая (включая папки и html-файл):

- Core
- Helpers
   - Email
     EMailHelper.cs
     - Templates
       template.html
 - Infrastructure
 - WebApi (this is the main project, with appsettings.json, ...)

Что ж, когда я пытаюсь загрузить «template.html» из «EmailHelper.cs», локально работает нормально как для Windows, так и для Mac, но когда я загружаю его в среду публикации (Azure - Linux), он всегда выдаетпредыдущее исключение.

В файле "template.html" есть "копия в тот же каталог" и задано как "содержимое" в качестве действия сборки.

Попытка также загрузить файл с такими URL-адресами:

const string htmlTemplate = "../Helpers/Email/Templates/template.html";

и

string emailTemplateUserRegistration = string.Format("..{0}Helpers{0}Email{0}Templates{0}{template.html}", Path.DirectorySeparatorChar);

но загрузить его невозможно.

Знаете ли вы, в чем причина этого?как я могу это исправить?

Заранее спасибо.

Редактировать:

Странно, если я загружаю этот URL не могу загрузить файл из проекта:

/ home / project / backend / Helpers / Email / Templates / template.html

, но с помощью vi откройте файл:

vi /home / project / backend / помощники / электронная почта / шаблоны / template.html

Способ загрузки файла следующий:

 var builder = new StringBuilder();

 using (var reader = File.OpenText(htmlTemplate))
 {
      builder.Append(reader.ReadToEnd());
 }

Ответы [ 2 ]

0 голосов
/ 15 февраля 2019

Наконец-то я решил это.

Я должен сказать, что забыл упомянуть, что мы используем Docker в Azure.

Поэтому проблема заключалась в том, что при публикации приложения все файлы находились впапка, определенная в конфигурации Docker, то есть:

FROM microsoft/dotnet:2.1-aspnetcore-runtime AS base
WORKDIR /app
EXPOSE 80

Таким образом, в папку / app копируются все файлы ресурсов, поэтому вместо этого URL-адреса:

/ home /project / backend / Helpers / Email / Templates / template.html

Имеет:

/ app / Email / Templates / template.html

Так что изменение этого URL в моей переменной "htmlTemplate" работает нормально:

const string templateUrl = @"Email/Templates/template.html";
0 голосов
/ 14 февраля 2019

Это возможно потому, что вы используете неправильный корневой путь во время выполнения в вашей среде Azure.Попробуйте получить путь от HostingEnviroment, используя внедрение зависимостей.

public class MyController{

MyController(IHostingEnvironment env){

var path = env.ContentRootPath;
var myTemplatePath = path + "/Helpers/Email/Templates/template.html"

}

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...