Что я делаю:
Я создаю механизм почтовой рассылки, который принимает шаблоны HTML, заменяет токены данными и затем отправляет почту на SMTP-сервер.В конечном итоге нам понадобится пользовательский интерфейс CMS, который позволит им добавлять / удалять шаблоны файлов или обновлять содержимое в них через пользовательский интерфейс CMS.В любом случае, я помещаю файлы .htm для шаблонов электронной почты в свой веб-проект MVC, и мне нужно прочитать их содержимое и вернуть строку HTML для работы.Если я перенесу весь этот код из своего MVC-проекта в слой уровня служебной программы C #, проблема заключается в том, что мне придется беспокоиться о поддержании физических путей («C: ... \ theMVCWebSiteFolder ... \ Email \ Templates \ SomeTemplate».htm "), и это для меня должно быть жестко закодировано, я думаю, чтобы отслеживать, если бы вы переместить сайт на другой сервер, другой раздел жесткого диска и т. д. Так что я хотел бы иметь возможность работать с файламииспользуя контекст текущего приложения, если только нет способа сделать это независимым от моего приложения MVC, и при этом не нужно беспокоиться о необходимости когда-либо менять местоположение физического корня каждый раз, когда мы перемещаем папки.
У меня естьследующий служебный метод, который я создал в служебном классе, который находится в папке где-то в моем веб-проекте ASP.NET MVC, просто в папке (папке вне любых папок просмотра:
public static string GetFileData(string filePath)
{
if (!File.Exists(HttpContext.Current.Request.PhysicalApplicationPath + filePath))
throw new FileNotFoundException(String.Format("the file {0} was not found", filePath));
string text;
FileStream fileStream = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.None);
using(StreamReader read = new StreamReader(fileStream))
text = read.ReadToEnd();
return text;
}
Я пытаюсьчтобы выяснить, почему контекст обнуляется здесь.Я первоначально попытался HttpContext.Current, но текущий идет ноль, поэтому он не может найтитекущий контекст в моем методе Utility.cs, который находится в моем веб-проекте MVC.
UPDATE:
Хорошо, так что согласие заключается в использовании объекта HttpRequestBase, а не объекта HttpContext.Current.Я все еще нахожу странным, что HttpContext.Current имеет значение null.Но, двигаясь дальше, если мой Utility.cs находится вне контекста контроллера или представления, то как, черт возьми, я могу получить экземпляр текущего запроса (HttpRequestBase) для работы и отправить экземпляр, который реализует HttpRequestBase (я не знаю,что это за объект, если я захочу сделать это "способом MVC" вне контроллера или представления) для этого служебного метода?