ASP.NET MVC Routing для файлов с несколькими подкаталогами - PullRequest
5 голосов
/ 18 августа 2010

Мне нужно настроить обработчик файлов для маршрутизации с несколькими подкаталогами, например, tihs;

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

Я попытался поместить это в файл global.asax;

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

Я использую ImageHandler из этого Вопроса , который отлично работает, если у вас есть один подкаталог (т. Е. '/Images/15/786936215595.jpg'), но не работает, когда у вас несколько каталогов .

Я попытался установить подстановочный знак, и это не сработало (т. Е. 'Новый маршрут ("охватывает / {filepath} / * / {имя файла}"')

Это обслуживание изображений с большого NAS (примерно 3 миллиона изображений), поэтому я не могу просто перемещать файлы.

Спасибо!

Ответы [ 2 ]

3 голосов
/ 19 августа 2010

Хорошо, после долгой игры и гугл фу, я нашел, как заставить его работать.

Измените определение маршрута следующим образом;

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

Затем поместите это после стандартного MapRoute.Важной частью является «*» перед filepath, который сообщает MVC, чтобы он отправлял что-либо после этого как часть filepath RouteData.Так что в методе GetHttpHandler () я могу получить полный путь, используя это:

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

Woot!

0 голосов
/ 18 августа 2010

Не можете ли вы трактовать весь путь как один параметр маршрута? Вот так:

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

А затем получить доступ ко всему пути в методе действия ActionResult Image(string path) { }?

...