alex alex - 1 month ago 6
jQuery Question

Working with a static .json file located in App_Data?

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?

Answer

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.