2008-12-13 21 views
18

En la aplicación en la que estoy trabajando, quiero permitir que el usuario cargue páginas HTML estáticas para reemplazar la página MVC View predeterminada de "perfil de usuario". es posible? Es decir, las páginas html cargadas por el usuario se agotarán por completo de MVC y pueden incluir sus propios enlaces CSS, etc.ASP.NET MVC: ¿Cómo usar páginas HTML estáticas en aplicaciones MVC?

Ideas? Sugerencias?

Respuesta

22

Obviamente, el .NET MVC framework maneja el contenido estático ya para imágenes/css/js, etc. Simplemente sería cuestión de extender ese (¿enrutamiento?) Para pasar archivos .html directamente a IIS. Eso junto con una pizca de reescritura para hacer urls más bonitas debería hacer el truco.

Sin embargo, sería muy, muy cauteloso de permitir el contenido generado por el usuario en forma de subidas de HTML sin formato ya que está dejando una puerta muy abierta. En el mejor de los casos, terminará con páginas llenas de spam/pornografía/anuncios. En el peor de los casos, proporcionará una puerta de enlace para que las personas carguen scripts de cross-site y potencialmente carguen contenido malicioso para dañar su sitio. Podría fácilmente tomar un formulario existente en su sitio, codificar una carga de basura en él, y ejecutarlo desde su página de inicio y romper un montón de cosas.

Por lo menos, debe analizar el contenido cargado para reducirlo a solo un bloque de contenido, y luego ajustarlo por su cuenta, yo personalmente estaría mucho más inclinado a proporcionar a los usuarios un buen WYSIWYG editor para editar un solo bloque de contenido: cualquier editor que valga la pena debería proporcionarle una desinfección con respecto a los elementos que incluye/excluye. Luego, almacene este fragmento de contenido en su base de datos/disco y haga que la solicitud de una página de inicio pase por una ruta de controlador MVC estándar y cargue ese contenido.


Editar - para usted solicita para ejemplos Usted debe ser capaz de añadir una regla Ignorar para su enrutamiento - habrá probablemente ya ser ejemplos de estos ya - grieta abrir su archivo Global.asax - tendrá que poner en una llamada al método routes.IgnoreRoute:

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

debe dejar que IIS manejar todas las solicitudes de yourwebsite.com/UserPages/aUser/homepage.html - también se puede jugar sobre un poco más con los fragmentos de comodín/restricciones para soluciones más bonitas

0

Te sugiero que hagas tu ViewEngine personalizado que te permita usar etiquetas estáticas html con etiquetas personalizadas, que serán reemplazadas por información del usuario.

Por lo tanto, el motor de vista puede aceptar algo así:

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

y producir

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

Este marcado a medida que puede almacenar en la base de datos, por ejemplo. Puede echar un vistazo a las implementaciones de ViewEngine personalizadas en MVC Contrib project.

Cuestiones relacionadas