在asp.net-mvc中从服务器读取文本文件的最佳方法是什么?

57

在我的一个控制器操作中,我需要读取一个包含一些参考数据的文本文件。目前我只是把它放在“/Content”目录下。

我的问题是:

  1. 这个位置是正确的吗?还是应该把它放在另一个目录下?
  2. 在服务器上读取asp.net-mvc中的文本文件的最佳方法是什么?

1
"正确" 取决于很多因素;大小、性质、更新频率等。 - Marc Gravell
使用这个库可以轻松在ASP.NET中实现:http://www.filehelpers.com/ - rahularyansharma
17
真的吗?要使用图书馆来读取文本文件?! - user156888
2个回答

112

如果文件不应该通过URL直接访问,您应该将其放在App_Data中。

要读取它,只需使用:

var fileContents = System.IO.File.ReadAllText(Server.MapPath(@"~/App_Data/file.txt"));

如果该文件应该对公众可用,请将其放在Content或Upload(如果已上传)文件夹中。 - mare
21
谢谢你的小费。如果无法访问Server,HostingEnvironment.MapPath(@"~/App_Data/file.txt")也可以使用。 - Hong
对我来说不起作用,因为这个结果包括了URL的路由。 - Mike de Klerk
当我将项目发布到服务器上时,它对我不起作用,但在调试模式下使用HostingEnvironment.MapPath可以正常工作。 - Hossein Narimani Rad
在cshtml文件中创建ViewBag.Property是否存在任何架构上的问题,或者应该从控制器提供此文件内容?我有几个包含某些页面的静态文本的文件(穷人CMS),我认为这不适合数据库,因为数据很少会改变。 - DtechNet

23

好的,这种方法适用于我(VS2017)

  1. 将file.txt的Build Action设置为Content
  2. 检查是否将Copy to output directory设置为不是'Do not copy'
  3. 使用HostingEnvironment.MapPath(@"~/App_Data/file.txt") (感谢Hong的评论)

var fileContents = 
    System.IO.File.ReadAllText(HostingEnvironment.MapPath(@"~/App_Data/file.txt"));

2
这似乎是2017年及以后的答案。 - user585968

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接