Domanda

Ho un controller MVC chiamato Download. http: // mysite / Download

Voglio anche mettere un file fisico in una cartella fisica chiamata http: //mysite/Downloads/MyFile.zip .

Se creo semplicemente una cartella, ottengo un 403 quando sfoglio http: // mysite / Download . (Molto probabilmente a causa della navigazione nella directory è disabilitato) Voglio invece avviare il controller MVC.

Come posso farlo?

È stato utile?

Soluzione

Se si accede a http: // mysite / Downloads / {ACTION} , si attiva l'azione dei controller.

L'unica cosa che non funzionerà nel tuo esempio è il / Download senza alcuna azione. Puoi riscrivere questo URL per reindirizzarti all'azione predefinita.

Inoltre, dovrai fare in modo che il gestore del percorso ignori i tuoi file di download. Puoi aggiungere una riga nel tuo file global.asax per ignorare tutti i file zip o qualche altro motivo ignorato adatto.

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

Altri suggerimenti

Da .NET 3.5, è possibile instradare i file esistenti:

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

Quindi supponiamo di avere una cartella nella radice del sito chiamata Markets contenente un file audio.mp3 :

\Markets
\Markets\audio.mp3

Supponendo l'esistenza di un MarketsController , se facessimo una richiesta per Markets , verrebbe indirizzato a Markets / Index .

Se avessimo richiesto /Markets/audio.mp3 avremmo ottenuto il file mp3 e se avessimo richiesto Markets / AnythingElse , verrebbe applicato il normale routing.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top