【发布时间】:2008-12-13 08:30:31
【问题描述】:
在我正在开发的应用程序中,我希望允许用户上传静态 HTML 页面来替换默认的“用户配置文件”MVC 视图页面。这可能吗?也就是说,用户上传的html页面会完全用完MVC,可以包含自己的CSS链接等。
想法?有什么建议吗?
【问题讨论】:
标签: asp.net asp.net-mvc
在我正在开发的应用程序中,我希望允许用户上传静态 HTML 页面来替换默认的“用户配置文件”MVC 视图页面。这可能吗?也就是说,用户上传的html页面会完全用完MVC,可以包含自己的CSS链接等。
想法?有什么建议吗?
【问题讨论】:
标签: asp.net asp.net-mvc
显然 .net MVC 框架已经为图像/css/js 等处理静态内容。只需扩展(路由?)以将 .html 文件直接传递到 IIS。再加上一些重写以制作更漂亮的网址应该可以解决问题。
但是,我会非常非常谨慎地允许以原始 HTML 上传形式上传用户生成的内容,因为您将敞开大门。充其量,您会看到人们的页面充满垃圾邮件/色情/广告。在最坏的情况下,您将为人们提供一个网关来上传跨站点脚本黑客并可能上传恶意内容以破坏您的站点。他们可以轻松地采用您网站上的现有表单,将大量垃圾硬编码到其中,然后从他们的主页执行它并破坏一大堆东西。
至少您应该解析上传的内容以将其缩减为只是一个内容块,然后将其包装在您自己的内容中等。我个人更倾向于为用户提供一个不错的所见即所得编辑器编辑单个内容块 - 任何值得称道的编辑器都应该为您提供关于它包含/排除哪些元素的清理。然后将此内容片段存储在您的数据库/磁盘上,并让对主页的请求通过标准 MVC 控制器路由并加载该内容。
编辑 - 为您请求示例 你应该能够在你的路由中添加一个忽略规则——可能已经有这些例子了——破解你的 Global.asax 文件——你会想要调用 routes.IgnoreRoute 方法:
routes.IgnoreRoute("UserPages/{*path}");
应该让 IIS 处理对 yourwebsite.com/UserPages/aUser/homepage.html 的所有请求 - 您还可以更多地使用通配符片段/约束来获得更漂亮的解决方案
【讨论】:
我建议你制作你的自定义 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>
例如,您可以将此自定义标记存储在数据库中。 您可以在 MVC Contrib project 查看自定义 ViewEngine 实现。
【讨论】: