在 .NET Core 2.2 Razor 页面中写入文本文件时无法获得正确的语法

Unable to Get Syntax Correct for Writing to Text File in .NET Core 2.2 Razor Pages

过去很容易找到包含文本文件的文件夹的路径,然后创建并写入或添加到现有文件。

现在,我无法正确理解语法。

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();

"File." 带有红色下划线,"Server." 也是如此。

我看过提到添加此代码以获取 "environment" 的示例,但我看到所有的红色提示 HomeController 必须具有 return 值。创建页面是 return 值。

private IHostingEnvironment _env;

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

下面的代码位于我的 Razor 页面的顶部,它用完了 return 值。所以无论我将 HomeController 命名为什么,它都会给我一个错误:

private readonly OESAC.Models.MyDbContext _context;

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

据说我可以引用_env变量来组合路径。 目标是在创建行任务期间简单地将成功和失败写入文本文件。

如果我正确理解问题,您正在使用 Razor Pages。控制器用于 WebApi 和 MVC,但 Razor 页面不需要。但可以应用相同的原则。只要您需要的其他 类 配置了依赖注入 (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;
}

然后在 Page 事件中,您可以执行如下操作:

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

注意 这将在您的网络根目录中写入一个文件,该文件可能是公开访问的,而不是您想要的。如果您希望记录有关任务内部运行的信息,使用记录器可能是更好的方法(有关详细信息,请参阅 here