Usando o roteamento do ASP.NET para servir arquivos estáticos

Roteamento ASP.Net (não MVC) pode ser usado para servir arquivos estáticos?

Digamos que eu queira rotear

http://domain.tld/static/picture.jpg

para

http://domain.tld/a/b/c/picture.jpg

e eu quero fazer isso dinamicamente no sentido de que a URL reescrita é computada em tempo real. Não consigo configurar uma rota estática de uma vez por todas.

De qualquer forma, posso criar uma rota como esta:

routes.Add(
  "StaticRoute", new Route("static/{file}", new FileRouteHandler())
);

NoFileRouteHandler.ProcessRequest método eu posso reescrever o caminho de/static/picture.jpg para/a/b/c/picture.jpg. Eu quero então criar um manipulador para arquivos estáticos. O ASP.NET usa oStaticFileHandler para este fim. Infelizmente, essa classe é interna. Eu tentei criar o manipulador usando reflexão e ele realmente funciona:

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

Mas usar tipos internos não parece ser a solução adequada. Outra opção é implementar o meu próprioStaticFileHandler, mas fazê-lo corretamente (suporte HTTP coisas como intervalos e etags) é não-trivial.

Como devo abordar o roteamento de arquivos estáticos no ASP.NET?

questionAnswers(5)

yourAnswerToTheQuestion