原因是在.net中Request时出现有HTML或Javascript等字符串时,系统会认为是危险性值,立马报错上面的错误.网上查了下解决的方法如下:
在Web.Config文件中加上这样的配置:
<pages validateRequest="false"/>
如下:
<configuration>
<system.web>
<pages validateRequest="false" />
</system.web>
</configuration>
如果IIS部署环境是.NET4.0的话,在Web.Config文件中的配置节</system.web>之前加上如下一句配置就可以了
<httpRuntime requestValidationMode="2.0"/>
如下:
<configuration>
<system.web>
<httpRuntime requestValidationMode="2.0"/>
<pages validateRequest="false" />
</system.web>
</configuration>
上述方法会导致整个站点都不会抵制注入,如果在某些安全要求比较高的场景下需要抵制注入则可以用如下方法
1. 如果确保该页面不需要抵制注入则可以在.aspx文件头中加入这句:
<%@ Page validateRequest="false" %>
2. 不禁用validateRequest=false。
在你当前页面添加Page_Error()函数,来捕获所有页面处理过程中发生的而没有处理的异常。然后给用户一个合法的报错信息。如果当前页面没有Page_Error(),这个异常将会送到Global.asax的Application_Error()来处理,你也可以在那里写通用的异常报错处理函数。如果两个地方都没有写异常处理函数,才会显示这个默认的报错页面呢。
举例而言,处理这个异常其实只需要很简短的一小段代码就够了。在页面的Code-behind页面中加入这么一段代码:
以下是引用片段:
protected voidPage_Error(object sender, EventArgs e)
{
Exception ex =Server.GetLastError();
if (ex is HttpRequestValidationException)
{
Response.Write("请您输入合法字符串。");
Server.ClearError(); //如果不ClearError()这个异常会继续传到 Application_Error()。
}
}
如果嫌麻烦可以在Global.asax文件的Application_Error()来处理。这样在整个网站中都生效。
void Application_Error(objectsender,EventArgs e)
{
// 在出现未处理的错误时运行的代码
Exception ex = Server.GetLastError();
if (ex is HttpRequestValidationException)
{
Response.Write("请您输入合法字符串。");
Server.ClearError(); // 如果不ClearError()这个异常会继续传到Application_Error()。
}
}