12

I have a MVC controller called Downloads. http://mysite/Downloads

I also want to put a physical file in a physical folder called http://mysite/Downloads/MyFile.zip.

If I simply create a folder, I get a 403 when browsing to http://mysite/Downloads. (Most likely because of directory browsing is disabled) But I want the MVC controller to kick in instead.

How do I do that?

2 Answers 2

5

If you browse to http://mysite/Downloads/{ACTION} it will fire your controllers action.

The only thing that won't work in your example is the /Downloads with no action. You could re-write this URL to redirect you to your default action.

In addition, you will need to have the routehandler ignore your download files. You can add a line in your global.asax file to ignore all zip files or some other ignore pattern that suits.

routes.Ignore("{resource}.zip");
Sign up to request clarification or add additional context in comments.

Comments

5
+100

Since .NET 3.5, you can route existing files:

public static void RegisterRoutes(RouteCollection routes) {
    routes.RouteExistingFiles = true;
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
    routes.MapRoute(
       name: "Default",
       url: "{controller}/{action}/{id}",
       defaults: new { controller = "Home", 
                          action = "Index", 
                          id = UrlParameter.Optional }
    );
}

So suppose we had a folder on the site root called Markets containing an audio.mp3 file:

\Markets
\Markets\audio.mp3

Assuming the existence of a MarketsController, if we made a request for Markets, it'd be routed to Markets/Index.

If we requested /Markets/audio.mp3 we'd get the mp3 file and if we requested Markets/AnythingElse, normal routing would apply.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.