Я бы создал отдельную папку (например, «DynamicContent» или что-то в этом роде) для хранения этих динамических страниц и добавил бы соответствующий IgnoreRoute
вызов метода RegisterRoutes в Global.asax.cs, например:
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("DynamicContent/{*pathInfo}");
...
}
После этого пользователи смогут получить доступ к этим страницам, используя такие URL-адреса, как
http://%your_site%/DynamicContent/%path_to_specific_file%
ОБНОВЛЕНИЕ
Если вы не хотитечтобы положить файлы на жесткий диск сервера, вы можете создать специальный контроллер для этих файлов.Маршрут для этого должен выглядеть следующим образом:
public static void RegisterRoutes(RouteCollection routes)
{
...
routes.MapRoute(
"DynamicRoute", // Route name
"Dynamic/{*pathInfo}", // URL with parameters
new { controller = "Dynamic", action = "Index"} // Parameter defaults
);
}
Ваш DynamicController.cs должен выглядеть следующим образом:
public class DynamicController : Controller
{
public ActionResult Index(string pathInfo)
{
// use pathInfo value to get content from DB
...
// then
return new ContentResult { Content = "%HTML/JS/Anything content from database as string here%", ContentType = "%Content type either from database or inferred from file extension%"}
// or (for images, document files etc.)
return new FileContentResult(%file content from DB as byte[]%, "%filename to show to client user%");
}
}
Обратите внимание, что звездочка (*) перед pathInfo заставит этот маршрут захватить всю часть URLпосле Dynamic
- поэтому, если вы ввели http://%your_site%/Dynamic/path/to/file/something.html, то в параметр pathInfo
будет передана целая строка *1024* в метод DynamicController / Index.