Why CSS and JS files bypass Asp.Net MVC routes? Why CSS and JS files bypass Asp.Net MVC routes? asp.net asp.net

Why CSS and JS files bypass Asp.Net MVC routes?


It's not because of how MVC handles the request to jquery.js it's because of the way IIS handles the request to jquery.js. IIS assumes that resources such as .js, .jpg, etc, are all static resources, and thus doesn't need to pass them through the ASP.NET engine. In order to to prevent this from occurring you can add a line to the web.config for a path that you want IIS to leave alone.

<system.webserver>    <handlers>    <add name="scripts" path="/Scripts/*" verb="GET" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0"/>    </handlers></system.webserver>

Adding something like that should allow your JS files to be served via ASP.NET and not directly through IIS.


After a little bit more of research I found the following quote from Steven Sanderson's book:

However, the routing system still does check the file system to see if an incoming URL happens to match a file or disk, and if so, routing ignores the request (bypassing any route entries that the URL might also match) so that the file will be served directly. This is very convenient for static files, such as images, CSS, and JavaScript files. You can keep them in your project (e.g., in your /Content or /Script folders), and then reference and serve them directly, just as if you were not using routing at all. Since the file genuinely exists on disk, that takes priority over your routing configuration.

If, instead, you want your routing configuration to take priority over files on disk, you can set the RouteCollection’s RouteExistingFiles property to true. (It’s false by default.)

That was something very interesting to learn and led me to the actual problem. A much simpler one. As it happened, the pertinent scripts were not present on the folder. At least not the ones with the exact same version requested on the view. That was the responsible for Asp.Net MVC thinking it was a controller/action request.

Reference: http://forums.asp.net/t/1536510.aspx/1


check that use "~/" before your Links or Scripts like :src="~/assets/js/main.js"