我如何读取文件? (获取服务器在上下文中不存在错误)

How do I read a file? (Getting a server does not exist in context error)

我在文档中找到了这段代码,它告诉我服务器在上下文中不存在错误(针对 Server.MapPath())。 还有其他读取文件的方法吗?我尝试输入我要读取的文件的绝对路径,但它给出了空指针异常。 谢谢 P.S 我使用的是.net core 3.1

@{
var result = "";
Array userData = null;
char[] delimiterChar = {','};

var dataFile = Server.MapPath("~/App_Data/data.txt");

if (File.Exists(dataFile)) {
    userData = File.ReadAllLines(dataFile);
    if (userData == null) {
        // Empty file.
        result = "The file is empty.";
    }
}
else {
    // File does not exist.
    result = "The file does not exist.";
    }
}
<!DOCTYPE html>

<html>
<head>
<title>Reading Data from a File</title>
</head>
<body>
<div>
    <h1>Reading Data from a File</h1>
    @result
    @if (result == "") {
        <ol>
        @foreach (string dataLine in userData) {
        <li>
            User
            <ul>
            @foreach (string dataItem in dataLine.Split(delimiterChar)) {
                <li>@dataItem</li >
            }
            </ul>
        </li>
        }
        </ol>
    }
</div>
</body>
</html>

如果您使用的是 MVC 项目,为什么不在 Controller 中读取文件,然后通过 Model 传递该文本? 像下面这样的东西?

public IActionResult Index()
        {
            var result = "";
            Array userData = null;
            char[] delimiterChar = { ',' };

            var dataFile = Server.MapPath("~/App_Data/data.txt");

            if (File.Exists(dataFile))
            {
                userData = File.ReadAllLines(dataFile);
                if (userData == null)
                {
                    // Empty file.
                    result = "The file is empty.";
                }
            }
            else
            {
                // File does not exist.
                result = "The file does not exist.";
            }

            return View(result);
        }

然后 Index.cshtml

@model string
@if (@Model == "") {
   .
   .
   .
}

it is giving me server doesn't exist in context error(for Server.MapPath())

Is there any other way of reading a file?

请注意 Server.MapPath 尚未包含在 ASP.NET 核心中。

要访问文件/App_Data/data.txt,您可以参考下面的代码片段。

@using Microsoft.AspNetCore.Hosting

@inject IWebHostEnvironment env

@{
    var result = "";

    Array userData = null;
    char[] delimiterChar = { ',' };
    var dataFile = System.IO.Path.Combine(env.ContentRootPath, @"App_Data\data.txt");

    if (System.IO.File.Exists(dataFile))
    {
        userData = System.IO.File.ReadAllLines(dataFile);
        if (userData == null)
        {
            // Empty file.
            result = "The file is empty.";
        }
    }
    else
    {
        result = "The file does not exist.";
    }
}

您可以从此文档了解更多关于“在 ASP.NET Core 中使用静态文件”的信息:

https://docs.microsoft.com/en-us/aspnet/core/fundamentals/static-files?view=aspnetcore-5.0#serve-static-files

如果可能,您可以将代码逻辑放在控制器操作方法中,而不是放在 MVC 视图中。