ASP.NET MVC:如何在MVC应用程序中使用静态HTML页面?

时间:2008-12-13 08:30:31

标签: asp.net asp.net-mvc

在我正在处理的应用程序中,我希望允许用户上传静态HTML页面以替换默认的“用户配置文件”MVC视图页面。这可能吗?也就是说,用户上传的html页面将完全用完MVC,并且可以包含自己的CSS链接等。

想法?建议?

2 个答案:

答案 0 :(得分:23)

显然.net MVC框架已经为images / css / js等处理静态内容。这只是扩展(路由?)将.html文件直接传递给IIS的问题。再加上一点点改写以制作更漂亮的网址应该可以解决问题。

然而,当你离开一扇非常宽敞的门时,我会非常非常警惕以原始HTML上传的形式允许用户生成的内容。充其量,你最终会收到垃圾/色情/广告的人们的页面。在最糟糕的情况下,您将为人们提供上传跨站点脚本黑客的网关,并可能上传恶意内容以破坏您的网站。可以轻松地在您的网站上获取现有表单,将大量垃圾硬编码到其中,并从主页中删除它并打破一大堆东西。

至少你应该解析上传的内容,将其简化为一个内容块,然后将其包装在你自己的内容中。我个人更倾向于为用户提供一个漂亮的WYSIWYG编辑器编辑单个内容块 - 任何值得它的编辑器应该为您提供关于它包含/排除的元素的清洁。然后将此内容片段存储在数据库/光盘上,并让主页的请求通过标准MVC控制器路由并加载该内容。


编辑 - 为您请求示例 你应该能够在你的路由中添加一个忽略规则 - 可能已经有这些例子 - 破解你的Global.asax文件 - 你会想要调用routes.IgnoreRoute方法:

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

应该让IIS处理对yourwebsite.com/UserPages/aUser/homepage.html的所有请求 - 您还可以使用通配符片段/约束来玩更多更漂亮的解决方案

答案 1 :(得分:0)

我建议您制作自定义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实现。