2010-08-18 17 views
5

Necesito configurar un manejador de archivos para enrutar con varios subdirectorios como tihs;ASP.NET MVC Enrutamiento de archivos con múltiples subdirectorios

http://localhost/images/7/99/786936215595.jpg 

Intenté poner esto en el archivo global.asax;

routes.Add(
    "ImageRoute", 
    new Route("covers/{filepath}/{filename}", 
    new ImageRouteHandler())); 

estoy usando el ImageHandler encontrado en este Question, que funciona muy bien si usted tiene un único subdirectorio (es decir, '/images/15/786936215595.jpg') pero fracasa cuando tiene varios directorios.

He intentado establecer un comodín y que tampoco funcionaba (es decir, 'nueva Ruta ("cubiertas/{filepath}/*/{nombre del archivo}"')

Esto es servir a las imágenes de un gran NAS (piensa en algo como 3 millones de imágenes), así que no me gusta que sólo puede mover ficheros

Gracias

Respuesta

3

Ok, después de jugar mucho y google fu, encontré cómo hacerlo funcionar.

Cambie la definición de ruta de esta manera;

routes.Add(
    "ImageRoute", 
    new Route("images/{*filepath}", 
    new ImageRouteHandler())); 

A continuación, coloque esto después del MapRoute predeterminado. La parte importante es el "*" antes de la ruta del archivo, le dice a MVC que envíe algo después de esto como parte de la ruta del archivo RouteData. Entonces, en el método GetHttpHandler() puedo obtener la ruta completa al usar esto;

string fp = requestContext.RouteData.Values["filepath"] as string; 

Woot!

+0

Gracias, esto me puso en el camino correcto. –

0

no puede tratar la totalidad de la ruta como un parámetro de ruta de este modo:.!?

routes.Add(
    "ImageRoute", 
    "/images/{path}", 
    new { controller = "Image", action = "Image" } 
); 

¿Y luego acceder a la ruta completa en el método de acción ActionResult Image(string path) { }?

Cuestiones relacionadas