【问题标题】:Where to put file io in ASP.NET web api在 ASP.NET web api 中将文件 io 放在哪里
【发布时间】:2021-02-03 14:01:03
【问题描述】:

我目前在我的项目的控制器类的构造函数中调用我的文件 io 类。我注意到每次点击 api 端点时都会重新读取 csv 文件,这并不理想。我应该把这个放在哪里,这样我的 csv 才会在启动时被读取?

namespace API.Controllers
{
    [ApiController]

    public class CovidDataController : ControllerBase
    {
        private ReadCSV readCSV;

        public CovidDataController()
        {
            readCSV = new ReadCSV("CovidFileIO/covid19-download.csv");
            readCSV.CreateDataObjects(100); // Pass in how many lines to read
        }

        // This endpoint will return records from the covid data object.
        [Route("api/[controller]")] // route is api/CovidData
        [HttpGet]
        public List<CovidData> GetData()
        {
            return readCSV.covidDataObjects;
        }
    }
}

【问题讨论】:

  • 为什么不让数据静态化?
  • 这是 ASP.NET Core。不是 ASP.NET。您需要创建一个 DI 服务。控制器应该做控制器的事情。加载数据不是控制器的事情,而是数据层的事情。也不要将静态变量放在控制器中。查找 ASP.NET Core 的依赖注入。
  • 您有很多选择要考虑。但在我看来,最好的方法是在 ConfigureServices 类中的 ConfigureServices 方法中阅读它。这是在 .Net core 中读取配置文件的常用方法。
  • covidDataObjects 是什么类型?我需要它来向您展示如何将其注入 CovidDataController 构造函数
  • 另一种选择是在任何你想要的地方创建一个简单的静态类,并在其中检查你是否已经从 IO 读取数据。无论哪种方式,您都不会丢失数据。

标签: c# asp.net-core-webapi


【解决方案1】:

您可以创建一个中间件,然后在 startup.cs 中注册它只会在网站只点击一次 url 时运行

你的中间件代码

//创建中间件文件夹

public task CSVMiddleware(){

  private ReadCSV readCSV;

            readCSV = new ReadCSV("CovidFileIO/covid19-download.csv");
            readCSV.CreateDataObjects(100); // Pass in how many lines to read
            return readCSV.covidDataObjects;

   }
}

您可以在 startup.cs 中执行此操作

app.Run(CSVMiddleware);

【讨论】:

    猜你喜欢
    • 2016-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-04
    • 1970-01-01
    • 1970-01-01
    • 2014-05-27
    相关资源
    最近更新 更多