asp.net中的HTTPRequestValidationException

时间:2012-03-11 11:50:12

标签: asp.net

单击按钮,我希望将ckeditor值传递给处理程序。

$(document).ready(function () {
        $('#createtopic').click(function () {
            var text = $('#editor1').val();
           $.ajax({

                    type: "post",
                    url: "Handler/Topic.ashx",
                    data: "text=" +  text, //data to be passed
                    success: function (msg) {
                    $("#result").html(msg)
                       .fadeIn("fast");
                      )
                    }
                });

                return false;
            });
        });

Topic.ashx

         public void ProcessRequest (HttpContext context) {
           context.Response.ContentType = "text/html";
           context.Response.Write("Hello World");
           String topic_content = context.Request["text"];
           context.Response.Write(topic_content);
         }

错误

从客户端

检测到潜在危险的Request.Form值

文本=“

  <p>aaa</p>

“)。

2 个答案:

答案 0 :(得分:0)

ASP.NET检查危险输入(HTML,Javascript的位)并通过抛出验证异常来阻止它。您可以通过HTML编码传入的txt来解决这个问题。通常的方法是使用Javascript函数:

function encodeHtml(text) {
     encodedHtml = escape(text).replace(/\//g,"%2F")
                   .replace(/\?/g,"%3F")
                   .replace(/=/g,"%3D")
                   .replace(/&/g,"%26")
                   .replace(/@/g,"%40");
     return encodedHtml;
 } 

在您的请求中传递值时使用它:

data: "text=" +  encodeHtml(text), //data to be passed

在Topic.ashx的代码隐藏中,使用Server.HtmlDecode将其重新读入。

答案 1 :(得分:0)

ASP不会接受查询字符串中的脚本和html标记,您需要更改文本然后再将其恢复。 IMO最好的方法是JSON:

data:{ html: JSON.stringify(text)};

您可能需要为浏览器安装JSON插件。

您可以在代码中获取此信息:

var serialiser = new JavaScriptSerializer();
var html = serialiser.Deserialize(context.Request.QueryString["html"], typeof(string)); as string;

编辑:

在各种情况下尝试了这个,我建议也进行编码和解码。

data:{ html: JSON.stringify(encodeHtml(editor.getData()))};

您可以通过以下方式获取此信息:

var html = Server.UrlDecode(serialiser.Deserialize(context.Request.QueryString["html"], typeof(string)));

encodeHTML是Shah建议的一个功能:https://stackoverflow.com/a/9654774/1109858