原因:
由于在asp.net中,Request提交时出现有html代码或javascript等字符串时,程序系统会认为其具有潜在危险的值。环境配置会报出“从客户端 中检测到有潜在危险的Request.Form值”这样的Error。
解决方法:
方法1:禁用validateRequest
在.aspx文件头中加入这句:
<%@ Page validateRequest="false" %>
方法2:修改web.config文件
因为validateRequest默认值为true。只要设为false即可:
<configuration> <system.web> <pages validateRequest="false" /> </system.web> </configuration>
备注:如果你是.net 4.0或更高版本,一定要加入如下内容:
web.config里面加上
<system.web> <httpRuntime requestValidationMode="2.0" /> </system.web>
因为4.0的验证在HTTP的BeginRequest前启用,因此,请求的验证适用于所有ASP.NET资源,aspx页面,ashx页面,Web服务和一些HTTP处理程序等.
方法3(推荐):HtmlEncode, HtmlDecode
利用Server.HtmlEncode(string)方法,对字符串进行编码,这样就会将危险字符转义为普通的字符。如TextBox1.Text=Server.HtmlEncode(str);
protected void Page_Load(object sender, EventArgs e)
{ // This could mess up HTML.
string text = "you & me > them"; // 1
// Replace > with >
string htmlEncoded = Server.HtmlEncode(text); // 2
// Now has the > again.
string original = Server.HtmlDecode(htmlEncoded); // 3
// This is how you can access the Server in any class.
string alsoEncoded = HttpContext.Current.Server.HtmlEncode(text); // 4
StringWriter stringWriter = new StringWriter();
using (HtmlTextWriter writer = new HtmlTextWriter(stringWriter))
{ // Write a DIV with encoded text.
writer.RenderBeginTag(HtmlTextWriterTag.Div);
writer.WriteEncodedText(text);
writer.RenderEndTag();
}
string html = stringWriter.ToString(); // 5
}
输出:
Step 1: Before encoding has occurred.String: you & me > them Step 2: The string is encoded for HTML.String: you & me > them Step 3: String is converted back from HTML.String: you & me > them Step 4: The string is encoded for HTML again.String: you & me > them Step 5: The HTML string is written into a DIV.Text: <div>you & me > them</div>
本文转自stock0991 51CTO博客,原文链接:http://blog.51cto.com/qing0991/1745287,如需转载请自行联系原作者
本文介绍了解决ASP.NET中因提交含有HTML代码或JavaScript字符串导致的潜在危险Request值错误的方法。提供了三种解决方案:禁用validateRequest、修改web.config文件及使用HtmlEncode与HtmlDecode方法。
1528

被折叠的 条评论
为什么被折叠?



