Working with a static .json file located in App_Data?

13,454

Solution 1

The issue was being caused by a problem with IIS Express, and this post helped me resolve the issue. I navigated to

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

and added

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

to the <staticContent> section in there. It wasn't sufficient to add that line to web.config. So it is possible to work with a static .json file stored in the ../Content folder.

Solution 2

To read json files in visual studio first you need to use following in your web.config

you can use it anywhere in

<configuration>
      <system.webServer>
       <staticContent>  
          <mimeMap fileExtension="json" mimeType="application/json" />
       </staticContent>
     </system.webServer>
      -------All other Settings---
      ----Your all other setting------
</configuration>

App_Data cann't be accessed due to security restrictions but you can place your file somewhere else in you application.try doing it by using jquery function getJSON() below is an example.

      $("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");
   });
});

Happy Coding Enjoy

Solution 3

"exoriated me with lots of weird regex errors and other stuff" - more details might be needed there.

Did you try to use Razor syntax in a plain javascript file? Razor syntax only works in cshtml files.

A second guess of mine would be that App_Data is not served by the web server. This would be a huge security gap - any user could simply download your database files from that folder. If you want to make it available statically, put it in Scripts/ or Content/.

Share:
13,454
alex
Author by

alex

howdy

Updated on June 09, 2022

Comments

  • alex
    alex almost 2 years

    In my ASP.NET MVC 4 project, I have a .json file in my App_Data folder containing geographical data that I want to load up into D3.js.

    So far, my working approach has been to have jQuery perform an AJAX call to some Controller which returns a JsonResult - and on success, storing the JSON in some Javascript variable which gets loaded into D3. This time around, I'd like to skip the controller and request a static .json file directly from the App_Data folder instead.

    I tried grabbing the .json's relative path using var url = "@Url.Content("~/App_Data/example.json")";, but the Javascript debugger excoriated me with lots of weird regex errors.

    I also tried throwing the file into the Content folder to see if the directory name makes a difference.

    • var path = "@Url.Content("~/Content/example.json")"; resulted in

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

    • var path = @Url.Content("~/Content/example.json"); resulted in

      SyntaxError: invalid regular expression flag u: var path = /Content/example.json;

    • var json = $.getJSON("../Content/example.json") appears to send a request to the correct directory, but returns a 404 error. Additionally, using Razor syntax to point to the relative URL works, but still 404s.
    • Adding mimeMap info to web.config also didn't help.

    My question is: is it possible to work with a JSON file stored in App_Data (or the Content directory), using only Javascript/jQuery? In ASP.NET, is there only one way to do this? Is there a better approach to take altogether?