Подтвердить что ты не робот

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

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

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

4b9b3361

Ответ 1

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

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

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


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

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

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

Ответ 2

Я предлагаю вам создать свой собственный 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.