ASP.NET MVC routing and static data (ie. images, scripts, etc)
Asked Answered
C

3

6

If I have a request for a resource in my ASP.NET MVC1 (or 2) web app for a static resource, say ... an image or a javascript file or a css file ... does the .NET framework try and see if the request matches the route list ... and eventually can't find a controller for it?

eg.

Resource: /Content/Images/Foo.png

Does this request go through my route list .. fails to match any controllers / actions to this request and then attempt that path directly?

Cerellia answered 21/4, 2010 at 8:50 Comment(0)
S
7

You can choose whether to map an existing file or not setting the RouteCollection.RouteExistingFiles Property

Gets or sets a value that indicates whether ASP.NET routing should handle URLs that match an existing file.

Here is what I read from here:

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.)

Supererogation answered 21/4, 2010 at 9:27 Comment(1)
so what your saying is that, it first tries to find the file on the disk (eg. foo.png, something.js, some.ico, whatever). If it fails to do that, it then kicks in the routing system. So by the time it enters my own IControllerFactory (for example), it's assumed the resource doesn't physically exist on the disk. Lastly, this is for the default configuration set (ie. RouteExistingFiles = false).Cerellia
I
1

By default the routing engine will ignore route maps for all files that exist physically on the server. In short, you need to do nothing for a MVC app to link to static files.

Ichneumon answered 21/4, 2010 at 14:34 Comment(0)
S
0

You can also do a little trick in IIS. I store my js, images, css etc in the Content folder underneath the virtual directory.

If you then view properties (in IIS manager) of the Content folder, create it as a virtual directory, then remove the Wildcard mapping. Then set the Content folder back to a normal directory. This should then stop requests to these files being handled by the aspnet_isapi handler.

Samhita answered 21/4, 2010 at 10:0 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.