Question

J'ai un contrôleur MVC appelé Téléchargements. http: // mysite / Téléchargements

Je souhaite également placer un fichier physique dans un dossier physique intitulé http: //mysite/Downloads/MyFile.zip. .

Si je crée simplement un dossier, je reçois un 403 lors de la navigation vers http: // mon_site / Téléchargements . (Probablement parce que l'exploration du répertoire est désactivée) Mais je veux que le contrôleur MVC intervienne à la place.

Comment je fais ça?

Était-ce utile?

La solution

Si vous accédez à http: // mon_site / Téléchargements / {ACTION} , l'action de votre contrôleur sera déclenchée.

La seule chose qui ne fonctionnera pas dans votre exemple est le / Téléchargements sans action. Vous pouvez réécrire cette URL pour vous rediriger vers votre action par défaut.

De plus, vous devrez faire en sorte que routehandler ignore vos fichiers téléchargés. Vous pouvez ajouter une ligne dans votre fichier global.asax pour ignorer tous les fichiers zip ou un autre modèle d’ignorer qui convient.

routes.Ignore("{resource}.zip");

Autres conseils

Depuis .NET 3.5, vous pouvez router les fichiers existants:

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 }
    );
}

Supposons donc que le répertoire Markets de la racine du site contient un dossier audio.mp3 :

\Markets
\Markets\audio.mp3

En supposant l’existence d’un MarketsController , si nous demandions Markets , il serait acheminé vers Markets / Index .

Si nous demandions /Markets/audio.mp3 , nous obtiendrions le fichier mp3 et si nous demandions Markets / AnythingElse , le routage normal s'appliquerait.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top