Может ли использоваться трафик ASP.Net (а не MVC) для обслуживания статических файлов?Использование ASP.NET-маршрутизации для обслуживания статических файлов
Скажем, я хочу, чтобы маршрут
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?
Для меня это работает, но я не могу разобрать JS-файл в View Folder of Area, Чтобы исправить это, я использую вместо него другую папку в базовой папке области, например /Areas/MyArea/ClientScripts/foo.js – eka808
Как-то я, кажется, пропустил кусок в головоломке ... как игнорирование маршрутов к вашим статическим файлам помогает с маршрутизацией из '/ static' в'/a/b/c' (что запросил OP)? Не могли бы вы пролить немного света на свой ответ, я бы очень хотел понять это решение. – Oliver
Согласитесь с Оливером, что это НЕ отвечает OP и не должно приниматься в качестве решения. – dhochee