Frage

Ich habe einen MVC-Controller genannt Downloads. http: // mysite / Downloads

Ich möchte auch eine physische Datei in einem physischen Ordner abzulegen genannt http: //mysite/Downloads/MyFile.zip .

Wenn ich einfach einen Ordner erstellen, erhalte ich eine 403 beim Surfen auf http: // mysite / Downloads . (Wahrscheinlich wegen Durchsuchen von Verzeichnissen ist deaktiviert) Aber ich möchte, dass die MVC-Controller in anstatt kicken.

Wie kann ich das tun?

War es hilfreich?

Lösung

Wenn Sie wechseln Sie http://mysite/Downloads/{ACTION} wird es Ihre Controller Aktion ausgelöst.

Das einzige, was in Ihrem Beispiel wird nicht funktionieren, ist die /Downloads ohne Wirkung. Sie können diese URL neu schreiben Sie Ihre Standard-Aktion zu umleiten.

Darüber hinaus müssen Sie die routehandler der Download ignorieren Dateien haben. Sie können eine Zeile in der Datei global.asax hinzufügen alle Zip-Dateien oder ein anderen ignorieren Muster zu ignorieren, die passen.

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

Andere Tipps

Da .NET 3.5 können Sie Route vorhandene Dateien:

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 nehmen wir einen Ordner auf der Site-Stamm namens Markets enthält eine audio.mp3 Datei hatte:

\Markets
\Markets\audio.mp3

Unter der Annahme der Existenz eines MarketsController, wenn wir einen Antrag auf Markets gemacht, es verlegt werden würde Markets/Index.

Wenn wir /Markets/audio.mp3 baten wir die MP3-Datei bekommen würde, und wenn wir Markets/AnythingElse angefordert würden normalen Routing gelten.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top