使用位于App_Data中的静态.json文件?

时间:2014-08-06 13:55:15

标签: jquery asp.net json asp.net-mvc-4

在我的ASP.NET MVC 4项目中,我的.json文件夹中有一个App_Data文件,其中包含我要加载到D3.js中的地理数据。

到目前为止,我的工作方法是让jQuery对一些返回JsonResult的Controller执行AJAX调用 - 并且在成功时,将JSON存储在一些加载到D3中的Javascript变量中。这一次,我想跳过控制器并直接从App_Data文件夹中请求静态.json文件。

我尝试使用var url = "@Url.Content("~/App_Data/example.json")";抓取.json的相对路径,但是Javascript调试器使我厌倦了很多奇怪的正则表达式错误。

我还尝试将文件放入Content文件夹,以查看目录名是否有所不同。

  • var path = "@Url.Content("~/Content/example.json")";导致了
      

    NetworkError:404 Not Found - localhost:xxxxx / Content / u.json

  • var path = @Url.Content("~/Content/example.json");导致了
      

    SyntaxError:无效的正则表达式标志u:var path = /Content/example.json;

  • var json = $.getJSON("../Content/example.json")似乎向正确的目录发送请求,但返回404错误。此外,使用Razor语法指向相对URL工作,但仍然是404s。
  • Adding mimeMap info to web.config也没有帮助。

我的问题是:是否可以使用 Javascript / jQuery,使用存储在App_Data(或Content目录)中的JSON文件?在ASP.NET中,是否只有一种方式来执行此操作?是否有更好的方法可以完全采取行动?

4 个答案:

答案 0 :(得分:10)

要首先在visual studio中读取json文件,您需要在web.config

中使用以下内容

你可以在

的任何地方使用它
<configuration>
      <system.webServer>
       <staticContent>  
          <mimeMap fileExtension="json" mimeType="application/json" />
       </staticContent>
     </system.webServer>
      -------All other Settings---
      ----Your all other setting------
</configuration>

由于安全限制,无法访问App_Data,但您可以将文件放在应用程序的其他位置。使用jquery函数getJSON()执行此操作是一个示例。

      $("document").ready(function() {

    var jqxhr = $.getJSON("/Content/usa.json", function () {
        console.log("success");
    })
   .done(function () {
       console.log("second success");
   })
   .fail(function () {
       console.log("error");
   })
   .always(function () {
       console.log("complete");
   });
});

快乐编码享受

答案 1 :(得分:2)

问题是由problem with IIS Expressthis post helped me resolve the issue引起的。我导航到了

C:\Users\<username>\Documents\IISExpress\config\applicationhost.config 

并添加了

<mimeMap fileExtension=".json" mimeType="application/json" />

那里的<staticContent>部分。将该行添加到web.config是不够的。因此 可以使用存储在../Content文件夹中的静态.json文件。

答案 2 :(得分:1)

“让我摆脱了许多奇怪的正则表达式错误和其他东西” - 可能需要更多细节。

您是否尝试在普通的javascript文件中使用Razor语法? Razor语法仅适用于cshtml文件。

我的第二个猜测是网络服务器不提供App_Data。这将是一个巨大的安全漏洞 - 任何用户都可以简单地从该文件夹下载您的数据库文件。如果您想要静态使用它,请将其放在Scripts/Content/

答案 3 :(得分:0)

对于静态数据,只需将数据分配给js文件中的变量,并将其作为<script>标记放入页面中。将该变量传递给初始化方法