Может ли ASP.Net-маршрутизация (а не MVC) использоваться для статических файлов?
Скажем, я хочу маршрутизировать
http://domain.tld/static/picture.jpg
к
http://domain.tld/a/b/c/picture.jpg
и я хочу сделать это динамически в том смысле, что переписанный URL-адрес вычисляется "на лету". Я не могу настроить статический маршрут раз и навсегда.
Во всяком случае, я могу создать такой маршрут:
routes.Add(
"StaticRoute", new Route("static/{file}", new FileRouteHandler())
);
В методе FileRouteHandler.ProcessRequest
я могу переписать путь от /static/picture.jpg
до /a/b/c/picture.jpg
. Затем я хочу создать обработчик для статических файлов. Для этой цели ASP.NET использует StaticFileHandler
. К сожалению, этот класс является внутренним. Я попытался создать обработчик с использованием отражения, и он действительно работает:
Assembly assembly = Assembly.GetAssembly(typeof(IHttpHandler));
Type staticFileHandlerType = assembly.GetType("System.Web.StaticFileHandler");
ConstructorInfo constructorInfo = staticFileHandlerType.GetConstructor(BindingFlags.NonPublic | BindingFlags.Instance, null, Type.EmptyTypes, null);
return (IHttpHandler) constructorInfo.Invoke(null);
Но использование внутренних типов не является правильным решением. Другой вариант - реализовать собственный StaticFileHandler
, но делать это правильно (поддержка HTTP-материалов, таких как диапазоны и etags) является нетривиальным.
Как мне подойти к маршрутизации статических файлов в ASP.NET?