Невозможно получить правильный синтаксис для записи в текстовый файл в .NET Core 2.2 Razor Pages - PullRequest
0 голосов
/ 25 сентября 2019

Раньше было просто найти путь к папке с текстовыми файлами и либо создать и записать, либо добавить в существующий файл.

Теперь я просто не могу понять синтаксис правильно.

var userData = firstName + "," + lastName +
    "," + email + Environment.NewLine;

var dataFile = Server.MapPath("~/App_Data/data.txt");
File.AppendAllText(@dataFile, userData);
result = "Information saved.";


_context.Courses_New.Add(Courses_New);
await _context.SaveChangesAsync();

«Файл».подчеркнут красным, как и «Сервер.»Страница «Создать» - это возвращаемое значение.

private IHostingEnvironment _env;

public HomeController(IHostingEnvironment env)
{
    _env = env;   
}

Код ниже находится в верхней части моей страницы Razor, и он использует возвращаемое значение.Поэтому независимо от того, что я называю HomeController, он выдает ошибку:

private readonly OESAC.Models.MyDbContext _context;

public CreateModel(OESAC.Models.MyDbContext context)
{
    _context = context;
}

Возможно, я могу ссылаться на переменную _env для объединения пути.Цель состоит в том, чтобы просто записать успех и неудачу в текстовый файл во время задачи «Создать строку».

1 Ответ

1 голос
/ 26 сентября 2019

Если я правильно понял вопрос, вы используете Razor Pages.Контроллеры используются для WebApi и MVC, но не нужны для Razor Pages.Но те же принципы могут быть применены.Пока другие классы, которые вам нужны, настроены с помощью Dependency Injection (DI), вы можете просто добавить их в свой конструктор модели страницы.Поэтому измените CreateModel следующим образом:

private readonly OESAC.Models.MyDbContext _context;
private IHostingEnvironment _environment { get; private set; }

public CreateModel(OESAC.Models.MyDbContext context, IHostingEnvironment hostingEnvironment)
{
    _context = context;
    _environment = hostingEnvironment;
}

Затем в событии страницы вы можете сделать что-то вроде следующего:

public async Task<IActionResult> OnPostAsync() {        
    var webRootPath = _environment.WebRootPath;
    var dataPath = Path.Combine(webRootPath, "data.txt");
    ...
}

Примечание это запишет файлв вашем веб-корне, который может быть общедоступным, а не то, что вы хотите.Использование Logger может быть лучшим подходом, если вы хотите записать информацию о внутренних заданиях вашей задачи (см. здесь для получения дополнительной информации)

...