2010-09-18 57 views
5

Tôi có một biểu mẫu có văn bản (tinymce) cho nội dung đầu vào. Khi tôi thực hiện một yêu cầu ajax, tôi đã nhận lỗi:Cách gửi nội dung html thông qua yêu cầu ajax?

A potentially dangerous Request.Form value was detected from the client

Sau đó, tôi đã cố gắng một cái gì đó giống như

html.encodeURIComponent() hay escape() nhưng lỗi vẫn là ở đây

HTML:

<form id="editForm" action="" method="post"> 
    <input type="text" id="title" name="title" /> 
    <textarea id="content" name="content"></textarea> 
    <input type="button" id="submit" onclick="Submit();" /> 
</form> 

Tập lệnh (Tôi sử dụng jQuery)

function Submit(){ 
$.ajax({     
    url: 'ajax.aspx?type=addcontent&' + $('#editForm').serialize() + '&rnd=' + Math.random(), 
    success: function(data) { 
    alert('OK'); 
    } 
}); 
} 

Ngay khi tôi nhấn nút gửi, lỗi sẽ xuất hiện. Không có yêu cầu ajax nào được thực hiện. Tôi đã thử thêm ValidateRequest="false" vào trang aspx nhưng vấn đề vẫn còn ở đây.

Mọi trợ giúp đều được đánh giá cao!

Trả lời

7
$.post('/foo', { htmlContent: '<someHtml/>' }, function(result) { 
    alert('ok'); 
}); 

Bây giờ lỗi xuất phát từ tập lệnh phía máy chủ không chấp nhận HTML. Công cụ ASP.NET sẽ tự động thả bất kỳ yêu cầu nào có chứa HTML. Có nhiều cách khác nhau để vô hiệu hóa hành vi này theo nguy cơ của riêng bạn. Một trong số đó bao gồm thêm ValidateRequest="false" vào tiêu đề aspx @Page.

<%@ Page Language="C#" AutoEventWireup="false" ValidateRequest="false" %> 

Nếu nó là một ứng dụng ASP.NET MVC bạn có thể trang trí các hành động điều khiển mà bạn gửi bài với [ValidateInput(false)] thuộc tính:

[HttpPost] 
[ValidateInput(false)] 
public ActionResult Foo() 
{ 
    ...  
} 

Nó cũng quan trọng cần lưu ý rằng nếu bạn đang chạy .NET 4.0 bạn sẽ need to add những điều sau đây vào web.config của bạn:

<httpRuntime requestValidationMode="2.0" /> 
+0

Tôi đoán rằng quá nên tôi đã cố gắng để mã hóa nội dung html nhưng vẫn cảm thấy không có gì ~ ~ – ByulTaeng

+0

Bạn không cần để mã hóa bất cứ điều gì. Nếu bạn sử dụng hàm băm 'data' để gửi tham số, jQuery sẽ xử lý mã hóa. –

+0

Bạn có thể cho tôi một ví dụ hoặc một liên kết đến tut không? Cảm ơn rất nhiều! – ByulTaeng

1

Thay vào đó, một thay thế hợp lệ nhưng chậm khác là mã hóa base64 cho HTML của bạn nhẫn. tôi đã sử dụng phần mở rộng base64 của jQuery:.

var html = ...my html unsafe text... 

var encodedHtml = $.base64.encode(html); 
+0

điều này là khá mát mẻ :) serialize là nếu không nhận được hick-up Cảm ơn guys –

+0

chỉ cần sử dụng 'btoa()' để mã hóa, và 'atob()' để giải mã. https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/atob – harryparkdotio

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