Pregunta

Tengo un controlador MVC llamado Descargas. http: // mysite / Downloads

También quiero poner un archivo físico en una carpeta física llamada http: //mysite/Downloads/MyFile.zip .

Si simplemente creo una carpeta, obtengo un 403 cuando navego a http: // mysite / Downloads . (Lo más probable es que debido a la exploración del directorio está deshabilitado) Pero quiero que el controlador MVC se active en su lugar.

¿Cómo hago eso?

¿Fue útil?

Solución

Si navega hasta http: // mysite / Downloads / {ACTION} , activará la acción de sus controladores.

Lo único que no funcionará en su ejemplo es el / Downloads sin ninguna acción. Puede volver a escribir esta URL para redirigirlo a su acción predeterminada.

Además, deberá hacer que el controlador de ruta ignore sus archivos de descarga. Puede agregar una línea en su archivo global.asax para ignorar todos los archivos zip o algún otro patrón de ignorar que se adapte.

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

Otros consejos

Desde .NET 3.5, puede enrutar archivos existentes:

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

Supongamos que tenemos una carpeta en la raíz del sitio llamada Markets que contiene un archivo audio.mp3 :

\Markets
\Markets\audio.mp3

Suponiendo la existencia de un MarketsController , si solicitamos Markets , se enrutará a Markets / Index .

Si solicitáramos /Markets/audio.mp3 obtendríamos el archivo mp3 y si solicitáramos Markets / AnythingElse , se aplicaría el enrutamiento normal.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top