读取解决方案数据文件 ASP.Net Core

     2023-03-31     179

关键词:

【中文标题】读取解决方案数据文件 ASP.Net Core【英文标题】:Read solution data files ASP.Net Core 【发布时间】:2016-03-07 11:29:17 【问题描述】:

我有一个 ASP.NET Core (1.0-rc1-final) MVC 解决方案,我希望在项目中存储一个简单的文本文件,其中包含我读入控制器中的字符串数组的字符串列表。

我应该将该文件存储在我的项目中的什么位置,以及如何在我的控制器中读取这些文件?

在 ASP.net 4.x 中,我会使用 app_data 文件夹并完成类似的操作

string path = Server.MapPath("~/App_Data/File.txt");
string[] lines = System.IO.File.ReadAllLines(path);

Server.MapPath 在 ASP.Net Core 1 中似乎无效,我也不确定 app_data 文件夹是否有效。

【问题讨论】:

【参考方案1】:

我找到了一个简单的解决方案。

首先,您可以在解决方案的任何位置创建一个文件夹,您不必遵守 .net 4.x 中的“app_data”之类的约定。

在我的场景中,我在项目的根目录下创建了一个名为“data”的文件夹,我将我的 txt 文件放入其中并使用此代码将内容读取到字符串数组中

var owners = System.IO.File.ReadAllLines(@"..\data\Owners.txt");

【讨论】:

这在我的机器上对我不起作用,因为它跳过了项目文件夹。即:它需要是“D:\SOLUTION_FOLDER\PROJECT_FOLDER\data\Owners.txt”并尝试从“D:\SOLUTION_FOLDER\data\Owners.txt”中读取 您最好的选择是始终使用IHostingEnvironment 从 .NET Core 3.0 IHostingEnvironment 已过时,应替换为 IWebHostEnvironment【参考方案2】:

您可以在控制器中通过依赖注入获得环境:

using Microsoft.AspNetCore.Hosting;
....

public class HomeController: Controller

   private IHostingEnvironment _env;

   public HomeController(IHostingEnvironment env)
   
   _env = env;
      
...

然后您可以在操作中获取 wwwroot 位置: _env.WebRootPath

var owners =   System.IO.File.ReadAllLines(System.IO.Path.Combine(_env.WebRootPath,"File.txt"));

【讨论】:

为什么 _env.WebRootPath 会为空? @Corpsekicker...您可能没有注册依赖项 现在 IHostingEnvironment 已过时,应替换为 IWebHostEnvironment【参考方案3】:

在您的控制器中,您可以依赖 IApplicationEnvironment 并将其注入到构造函数中,然后您可以使用它来建立文件的路径,以便您的文件可以存在于项目中的文件夹中。在下面的示例中,“env”是 IApplicationEnvironment 的实例

using Microsoft.Extensions.PlatformAbstractions;

var pathToFile = env.ApplicationBasePath 
   + Path.DirectorySeparatorChar.ToString() 
   + "yourfolder"
   + Path.DirectorySeparatorChar.ToString() 
   + "yourfilename.txt";

string fileContent;

using (StreamReader reader = File.OpenText(pathToFile))

    fileContent = reader.ReadToEnd();

ApplicationBasePath 代表 applicationRootFolder

请注意,还有 IHostingEnvironment 具有熟悉的 .MapPath 方法,但它用于存储在 wwwroot 文件夹下的内容。您应该只将内容存储在您希望通过 http 请求提供服务的 wwwroot 文件夹下,因此最好将字符串列表保存在不同的文件夹中。

【讨论】:

感谢您的回复,但我找到了一个更简单的方法,我已发布并将标记为答案。不过谢谢 我给出了一个正确的答案,只是因为它不是您最终选择的确切语法,这不是不接受我的回答恕我直言的好理由。如果我没记错的话,你的答案也只会在 Windows 文件系统上是正确的。 好的,我明白你的观点,你的解决方案将是跨平台的,因此会更好 - 已经给了你答案,谢谢 1.看起来 IApplicationEnvironment 现在已经死了。 IHostingEnvironment 似乎已经取代了它。 2. Path.Combine() 将使这个解决方案更具吸引力:var pathToFile = System.IO.Path.Combine(env.ContentRootPath, "yourfolder", "yourfilename.txt");【参考方案4】:

这在本地和 IIS 上一直对我有用。

AppDomain.CurrentDomain.BaseDirectory

要访问您的文件,您只需执行以下操作:

import System.IO
...
var owners = File.ReadAllLines(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "File.txt"))

【讨论】:

这也与我在使用 dotnet core 的 Raspberry Pi 上工作【参考方案5】:

IApplicationEnvironmentIRuntimeEnvironment 已于 2016 年 4 月 26 日从 announcement on github 中删除。

我用这个替换了@JoeAudette 的代码

private readonly string pathToFile;

public UsersController(IHostingEnvironment env)

    pathToFile = env.ContentRootPath
       + Path.DirectorySeparatorChar.ToString()
       + "Data"
       + Path.DirectorySeparatorChar.ToString()
       + "users.json";

我的.json 文件位于src/WebApplication/Data/users.json

然后我像这样读取/解析这些数据

private async Task<IEnumerable<User>> GetDataSet()

    string source = "";

    using (StreamReader SourceReader = File.OpenText(pathToFile))
    
        source = await SourceReader.ReadToEndAsync();
    

    return await Task.FromResult(JsonConvert.DeserializeObject<IEnumerable<User>>(source)));

【讨论】:

我猜应该是 File.OpenText(pathToFile) 而不仅仅是 OpenText(pathToFile)【参考方案6】:

此方法在本地和 Azure 环境中都适用于我。它取自上面乔的回答

public static string ReadFile(string FileName)
    
        try
        
            using (StreamReader reader = File.OpenText(FileName))
            
                string fileContent = reader.ReadToEnd();
                if (fileContent != null && fileContent != "")
                
                    return fileContent;
                
            
        
        catch (Exception ex)
        
            //Log
            throw ex;
        
        return null;
    

这就是调用该方法的方式

string emailContent = ReadFile("./wwwroot/EmailTemplates/UpdateDetails.html");

【讨论】:

从 ASP.NET Core 中的 API 读取 JWT 令牌

...【问题描述】:我的设置:我已经创建并运行了一个WebAPI解决方案,该解决方案针对源(当前为db)执行用户名和密码的身份验证。这会生成JWT令牌并将其返回给请求应用程序(ASP.NETCore2.2应用程序)。大多数解决方案都谈到保... 查看详情

如何在 ASP.NET Core 项目中读取本地文件?

】如何在ASP.NETCore项目中读取本地文件?【英文标题】:HowdoIreadalocalfileinmyASP.NETCoreproject?【发布时间】:2016-06-2300:01:21【问题描述】:如果我想从我的项目中读取本地文件,给定项目目录的相对路径,我该如何实现?【问题讨论... 查看详情

在 asp.net core 1.0 上读取一个 excel 文件

】在asp.netcore1.0上读取一个excel文件【英文标题】:Readanexcelfileonasp.netcore1.0【发布时间】:2017-03-2606:31:16【问题描述】:您好,我正在尝试在我的asp.net项目中上传和读取一个excel文件,但我找到的所有文档都是针对ASPMVC5的。我的... 查看详情

ASP.NET Core 读取配置 IOptions 控制器未触发

】ASP.NETCore读取配置IOptions控制器未触发【英文标题】:ASP.NETCorereadconfigIOptionscontrollernottriggering【发布时间】:2016-02-2621:12:55【问题描述】:我正在尝试使用强类型类读取appsettings.json文件并将其作为参数传递给控制器​​。但是... 查看详情

Asp net core 在运行时读取或写入视图

】Aspnetcore在运行时读取或写入视图【英文标题】:Aspnetcorereadorwriteviewsatruntime【发布时间】:2021-06-2407:09:39【问题描述】:我有一个asp.net核心项目。在运行时,我想在编辑器中读取和修改我的视图文件夹中的视图,同时我想保... 查看详情

在 asp net core 控制台应用程序中读取 appsettings

...ork连接字符串。我做了很多谷歌,但没有找到任何单一的解决方案,甚至在微软的文档中也没有。这是我的问题。如何设置En 查看详情

为啥 Asp.net Core 无法读取 Ajax 参数?

】为啥Asp.netCore无法读取Ajax参数?【英文标题】:whyAsp.netCorecannotreadAjaxparameters?为什么Asp.netCore无法读取Ajax参数?【发布时间】:2020-10-0213:58:12【问题描述】:我正在使用Asp.netMVCCore和JqueryAjax插入到我的数据库中。问题总结我无... 查看详情

在 ASP.NET Core Web api 中读取 JSON 值

】在ASP.NETCoreWebapi中读取JSON值【英文标题】:readJSONvalueinASP.NETCorewebapi【发布时间】:2021-11-1223:17:48【问题描述】:获取价值的最佳方法是:"profileObj":"Name":"xxx","FirstName":"xxx","FastName":"xxx","Email":"xxx"【问题讨论】:【参考方案1】... 查看详情

我可以让 jQuery 读取 ASP.NET Core 2.1 的标签助手吗?似乎完全无视他们

】我可以让jQuery读取ASP.NETCore2.1的标签助手吗?似乎完全无视他们【英文标题】:CanImakejQueryreadtaghelpersofASP.NETCore2.1?Seemsit\'scompletelyignoringthem【发布时间】:2020-05-1116:34:28【问题描述】:jQuery可以读取asp-for标签助手和asp-action吗?... 查看详情

如何从数据库中读取加密值并将其与 ASP.NET Core 中的另一个值进行比较?

】如何从数据库中读取加密值并将其与ASP.NETCore中的另一个值进行比较?【英文标题】:HowtoreadanencryptedvaluefromdatabaseandcompareitwithanothervalueinASP.NETCore?【发布时间】:2021-10-2220:32:57【问题描述】:使用的工具:VisualStudio2019、ASP.NETC... 查看详情

ASP.NET Core 应用程序解决方案资源管理器中的文件嵌套

】ASP.NETCore应用程序解决方案资源管理器中的文件嵌套【英文标题】:FilenestinginsolutionexplorerofASP.NETCoreapplication【发布时间】:2019-01-0310:10:07【问题描述】:当我创建ASP.NETCore2.0RazorPage模板项目时,每个.cshtml及其.cs文件都会被拆... 查看详情

如何解决 docker-compose 环境变量不起作用 ASP.Net Core MVC

...述】:我在docker-compose文件中的配置变量无法在Startup.cs中读取。我正在使用Asp.netCore3.1和SQLServer。这 查看详情

使用 Blazor Webassembly 和 ASP.NET Core 安全文件下载

...间】:2020-12-0516:40:06【问题描述】:我在这里找到了一个解决方案,展示了如何使用JS注入创建控制器和下载文件:HowcanonegenerateandsaveafileclientsideusingBlazor?但是 查看详情

编码 ASP.NET Core 和 SQL Server 的问题

...问题描述】:我的数据库中有俄语问题。我从xlsx文件中读取数据。对于阅读,我使用库OfficeOpenXml。调试时编码没有问题,但添加到数据库后只有???。这就是我所拥有的:【问题讨论】:如果它的排序规则你可以通过运行这个查... 查看详情

在 ASP.NET Core 中读取环境变量

】在ASP.NETCore中读取环境变量【英文标题】:ReadenvironmentvariablesinASP.NETCore【发布时间】:2016-05-2309:23:55【问题描述】:使用DNX运行我的ASP.NETCore应用程序,我能够从命令行设置环境变量,然后像这样运行它:setASPNET_ENV=Productiondnxw... 查看详情

JS+ASP Net Core 从控制器获取数据

...试图正面发送一个帖子请求,但在我看来有一个更优雅的解决方案同时,我需要在Select元素的html更改时发生这种情况Iwroteascriptthatchangesthefieldw 查看详情

ASP .NET CORE 找不到带有自定义程序集的文件或程序集

...络堆栈,我已将其内置到几个.dll中,我想从另一个ASPCORE解决方案中引用这些。VS似乎找到了程序集,我可以在其中导航类型等。我 查看详情

Asp.Net Core Identity 创建用户

...【问题描述】:我无法创建用户。进程正常运行,向用户读取数据,重定向到主页/索引,但数据库中没有新用户。我在DbSeeder中有相同的代码,并且在那里正确创建了用户。[HttpPost]publicasyncTask<IActionResult>Create( 查看详情