ASP.NET在POST字符串时,如果字符串是HTML串,要注意的问题


ASP.NET在POST字符串时,如果字符串是HTML串,要注意的问题

默认情况下发出现这样的错误:asp.net中“从客户端中检测到有潜在危险的Request.Form值”的错误

解决方法:

1、在ASP.NET2时,需要在web.config里面的中加入如下代码,以关闭验证,也就是说提交带标签,比如 粗体 这样的值时,ASP.NET 不会报错。完整代码如下


   

2、在ASP.NET4时,还多了一个 requestValidationMode,这是什么意思呢?

requestValidationMode 有两个值:

  • 2.0仅对网页启用请求验证。是启用还是关闭取决于 validateRequest。
  • 4.0 默认值。任何 HTTP 请求都会启用请求验证,也就是说不光是网页,还包括 Cookie 等。此时强制启用,不管 validateRequest 为何值。

由于 requestValidationMode="4.0" 是强制启用,所以我们会发现在 .NET Framework 4.0 中仅靠设置 validateRequest 是关闭不了请求验证的,还得将 requestValidationMode 设置为 2.0。

完整代码如下:

   

    
   

3、MVC框架中,在控制方法前加入:

[ValidateInput(false)]属性。

另外还有一种方法就是实现自己的请求验证类,首先需要在web.config中指定请求验证类类型:

然后实现自己的请求验证类,这个类必须从RequestValidator类中继承,具体代码如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Util;
namespace Globals
{
///


/// Summary description for CustomRequestValidation
///

public class CustomRequestValidation : RequestValidator
{
public CustomRequestValidation() { }
protected override bool IsValidRequestString(HttpContext context, string value, RequestValidationSource requestValidationSource, string collectionKey, outint validationFailureIndex)
{
//block script tags
var idx = value.ToLower().IndexOf(“if (idx > -1)
{
validationFailureIndex = idx;
return false;
}
else
{
validationFailureIndex = 0;
return true;
}
}
}
}

IsValidRequestString函数返回true则验证通过,否则验证失败,还会出现文章开头所说的错误消息。此请求验证类当检测到