ASP.NET MVC: как использовать статические HTML-страницы в приложениях MVC?

В приложении, над которым я работаю, я хочу разрешить пользователю загружать статические HTML-страницы, чтобы заменить стандартную "пользовательскую анкету" страницы MVC View. Это возможно? То есть загруженные пользователем html-страницы будут полностью исчерпаны MVC, и он может включать в себя собственные CSS-ссылки и т. Д.

Идеи? Предложения?

13.12.2008 08:30:31
2 ОТВЕТА

Очевидно, инфраструктура .net MVC уже обрабатывает статический контент для images / css / js и т. Д. Это просто вопрос расширения (маршрутизации?) Для передачи файлов .html через IIS. Это в сочетании с чертой переписывания, чтобы сделать симпатичные URL-адреса должны сделать свое дело.

Тем не менее, я бы очень и очень осторожно разрешил создавать пользовательский контент в виде необработанных HTML-загрузок, так как вы оставляете очень широкую дверь открытой. В лучшем случае, вы собираетесь наматывать со страницами людей полных спама / порно / рекламы. В худшем случае, вы предоставите людям возможность загружать хаки для межсайтовых сценариев и потенциально загружать вредоносный контент, чтобы повредить ваш сайт. Они могут легко взять существующую форму на вашем сайте, жестко запрограммировать в ней кучу мусора, извлечь ее со своей домашней страницы и сломать целую кучу вещей.

По крайней мере, вы должны проанализировать загруженный контент, чтобы уменьшить его до просто блока контента, а затем обернуть его в свой собственный и т. Д. Лично я был бы гораздо более склонен просто предоставить пользователям хороший редактор WYSIWYG для редактирования единый блок контента - любой редактор, достойный его внимания, должен предоставить вам дезинфекцию относительно того, какие элементы он включает / исключает. Затем сохраните этот фрагмент контента в вашей базе данных / на диске и попросите домашнюю страницу пройти стандартный маршрут контроллера MVC и загрузить этот контент.


Отредактируйте - для вашего запроса примеров. Вы должны быть в состоянии добавить правило Ignore к вашей маршрутизации - возможно, уже будут примеры таких примеров - взломайте ваш файл Global.asax - вы захотите вызвать вызов к маршрутам. IgnoreRoute метод:

routes.IgnoreRoute("UserPages/{*path}");

Следует разрешить IIS обрабатывать все запросы на yourwebsite.com/UserPages/aUser/homepage.html - вы также можете поиграть немного больше с фрагментами / ограничениями подстановочных знаков для более красивых решений

23
14.12.2008 11:39:37

Я предлагаю вам создать свой собственный ViewEngine, который позволит использовать статическую HTML-разметку с пользовательскими тегами, которая будет заменена пользовательской информацией.

Итак, ваш движок зрения может принять что-то вроде этого:

<html>
    <body>
        <b><user:FirstName /></b>
        <b><user:LastName /></b>
    </body>
</html>

и производить

<html>
    <body>
        <b>First Name</b>
        <b>Last Name</b>
    </body>
</html>

Эту пользовательскую разметку вы можете хранить в базе данных, например. Вы можете взглянуть на пользовательские реализации ViewEngine в проекте MVC Contrib .

0
13.12.2008 09:21:42