2008-12-13 39 views
18

Trong ứng dụng tôi đang làm việc, tôi muốn cho phép người dùng tải lên các trang HTML tĩnh để thay thế trang xem MVC "hồ sơ người dùng" mặc định. Điều này có thể không? Nghĩa là, người dùng tải lên các trang html sẽ hoàn toàn cạn kiệt MVC và nó có thể bao gồm các liên kết CSS của riêng nó, v.v.ASP.NET MVC: Làm thế nào để sử dụng các trang HTML tĩnh trong các ứng dụng MVC?

Ý tưởng? Gợi ý?

Trả lời

22

Rõ ràng khuôn khổ MVC .net xử lý nội dung tĩnh đã có cho hình ảnh/css/js vv. Nó chỉ là vấn đề mở rộng (định tuyến?) Để chuyển các tệp .html qua thẳng tới IIS. Điều đó kết hợp với một dấu gạch ngang viết lại để tạo các url đẹp hơn nên thực hiện thủ thuật.

Tuy nhiên, tôi rất, rất thận trọng khi cho phép Nội dung do người dùng tạo dưới dạng tải lên HTML thô khi bạn để một cánh cửa rất rộng mở. Tốt nhất, bạn sẽ kết thúc với trang của người dân đầy spam/khiêu dâm/quảng cáo. Tại tồi tệ nhất, bạn sẽ cung cấp một cổng cho mọi người tải lên hacks kịch bản cross-site và có khả năng tải lên nội dung độc hại để làm hỏng trang web của bạn. Có thể dễ dàng lấy một biểu mẫu hiện có trên trang web của bạn, mã hóa một tải rác vào nó và phát hành nó từ trang chủ của họ và phá vỡ toàn bộ đống thứ.

Ít nhất bạn nên phân tích cú pháp nội dung đã tải lên để giảm nội dung xuống chỉ một khối nội dung và sau đó gói nội dung đó theo cách riêng của bạn, v.v. Cá nhân tôi có khuynh hướng cung cấp cho người dùng một WYSIWYG tốt biên tập viên để chỉnh sửa một khối nội dung duy nhất - bất kỳ trình chỉnh sửa nào đáng giá muối của nó cũng sẽ cung cấp cho bạn sự khử trùng như những yếu tố bao gồm/loại trừ. Sau đó lưu trữ đoạn nội dung này trong cơ sở dữ liệu của bạn/trên đĩa và yêu cầu trang chủ đi qua tuyến điều khiển MVC chuẩn và tải nội dung đó lên.


Chỉnh sửa - cho bạn yêu cầu cho ví dụ Bạn sẽ có thể thêm một quy tắc Bỏ qua để định tuyến của bạn - sẽ có thể đã được ví dụ về các đã - vết nứt mở file Global.asax của bạn - bạn sẽ muốn đặt trong một cuộc gọi đến phương pháp routes.IgnoreRoute:

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

nên để cho IIS xử lý tất cả các yêu cầu về yourwebsite.com/UserPages/aUser/homepage.html - bạn cũng có thể chơi về một chút nhiều hơn với các mảnh vỡ thẻ hoang dã/các ràng buộc cho các giải pháp đẹp hơn

0

Tôi khuyên bạn nên tạo ViewEngine tùy chỉnh cho phép sử dụng đánh dấu html tĩnh với các thẻ tùy chỉnh trong đó, nó sẽ được thay thế bằng thông tin người dùng.

Vì vậy, công cụ xem bạn có thể chấp nhận một cái gì đó như thế:

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

và sản xuất

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

đánh dấu tùy chỉnh này bạn có thể lưu trữ trong cơ sở dữ liệu, ví dụ. Bạn có thể xem triển khai ViewEngine tùy chỉnh tại MVC Contrib project.

Các vấn đề liên quan