【问题标题】:How to access a json file in an n-tier mvc application VS2015如何在 n 层 mvc 应用程序 VS2015 中访问 json 文件
【发布时间】:2017-02-24 05:47:21
【问题描述】:

我有一个包含多个项目的 Visual Studio 解决方案,包括一个服务项目(业务逻辑)和一个 MVC UI 项目(演示)。

在服务项目中,我有一个 json 文件,我需要在其中一个服务项目类中访问它。

我遇到的问题是,我尝试的几乎所有东西都会返回 UI 项目的路径(不是 json 文件所在的位置)

我尝试过的事情:

Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "geo.json");
//returns a path contained within UI project

HttpContext.Current.Server.MapPath("~/geo.json");
// also returns a path contained within UI project

Environment.CurrentDirectory;
// returns C:\\Program Files (x86)\\IIS Express

如何获取 UI 项目中未包含的 json 文件的路径?

【问题讨论】:

  • “服务项目”是什么样的项目?它是一个类库(一个.dll)吗?
  • 是一个类库。
  • 在部署时,您的类库的 JSON 最终会出现在 UI 的文件夹结构中(可能在 bin 中)。您需要右键单击类库中的 JSON 文件,选择 Properties 并将 Copy to Output Directory 更改为任一复制选项。
  • 感谢您的解释,我按照上面的步骤,然后通过基本目录访问了该文件。它有效。

标签: json asp.net-mvc n-tier-architecture


【解决方案1】:

由于“服务项目”是一个类库,你不能真正做任何与类库路径相关的事情。

类库在编译时变成.dll文件,并被复制到引用它的项目的bin文件夹中(也在编译时)。

因此,当服务项目中的代码询问它从哪里运行时,它会返回引用它的代码的位置,因为那是 .dll 文件结束的地方。

我希望这有点道理。如果我可以使用手偶的话会更容易解释,但是markdown目前不支持使用有趣的道具。

正如 Frank 在上面的评论中提到的,您可以通过选择文件的属性并选择“复制到输出目录”来告诉服务项目中的其他文件也被复制到 bin 文件夹中。如果您对 geo.json 文件执行此操作,它将最终位于 bin 文件夹中。

或者,在 MVC 应用程序中,您可以将 geo.json 文件的路径作为参数传递给 .dll 的方法。这样,调用者就可以知道信息的存储位置。

【讨论】:

  • (请记住,我是作为初级开发人员问的)考虑到这种情况,是否应该使用另一种类型的项目来包含我的业务逻辑?
  • ok.. 尝试提供足够的细节以使其有用。让我知道任何不清楚的行话。
  • 谢谢你,现在确实有意义,我以前从未遇到过这种情况。我想最好通过 webapi 公开 JSON,而不是在 bin 文件夹中不断更新/访问它?
  • 当有疑问时,总是做“最简单可行的事情”
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-09-06
  • 1970-01-01
  • 2013-02-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-15
  • 1970-01-01
相关资源
最近更新 更多