写在前面的话:本人在开发过程中使用富文本编辑器开发文章发布功能时候,保存带格式的文章内容到服务器时遇到了这种错误类型,网上一搜索解决办法满天飞的就是:
1.关闭验证<httpRuntime requestValidationMode="2.0"/>和2. ASP.NET添加<pages validateRequest="false">
以及MVC的控制器的action方法前面添加 [ValidateInput(false)]和在web.config配置节点中添加:
<system.web>
<httpRuntime requestValidationMode="2.0" /> </system.web>,本人在实际实验的时候,根本不行,很容易误导人,而且很不科学。
“/”应用程序中的服务器错误。
从客户端(newscontent="<span style="font-si...")中检测到有潜在危险的 Request.Form 值。
说明: ASP.NET 在请求中检测到包含潜在危险的数据,因为它可能包括 HTML 标记或脚本。该数据可能表示存在危及应用程序安全的尝试,如跨站点脚本攻击。如果此类型的输入适用于您的应用程序,则可包括明确允许的网页中的代码。有关详细信息,请参阅 http://go.microsoft.com/fwlink/?LinkID=212874。异常详细信息: System.Web.HttpRequestValidationException: 从客户端(newscontent="<span style="font-si...")中检测到有潜在危险的 Request.Form 值。
源错误:
执行当前 Web 请求期间生成了未经处理的异常。可以使用下面的异常堆栈跟踪信息确定有关异常原因和发生位置的信息。 |
堆栈跟踪:
[HttpRequestValidationException (0x80004005): 从客户端(newscontent="<span style="font-si...")中检测到有潜在危险的 Request.Form 值。] System.Web.HttpRequest.ValidateString(String value, String collectionKey, RequestValidationSource requestCollection) +9850840 System.Web.<>c__DisplayClass280_0.<ValidateHttpValueCollection>b__0(String key, String value) +22 System.Web.HttpValueCollection.EnsureKeyValidated(String key) +9848837 System.Web.HttpValueCollection.GetValues(Int32 index) +29 System.Collections.Specialized.NameValueCollection.Add(NameValueCollection c) +84 System.Web.Mvc.FormCollection..ctor(ControllerBase controller, Func`1 validatedValuesThunk, Func`1 unvalidatedValuesThunk) +69 System.Web.Mvc.FormCollectionModelBinder.BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext) +129 System.Web.Mvc.ControllerActionInvoker.GetParameterValue(ControllerContext controllerContext, ParameterDescriptor parameterDescriptor) +295 System.Web.Mvc.ControllerActionInvoker.GetParameterValues(ControllerContext controllerContext, ActionDescriptor actionDescriptor) +105 System.Web.Mvc.Async.<>c__DisplayClass25.<BeginInvokeAction>b__1e(AsyncCallback asyncCallback, Object asyncState) +445 System.Web.Mvc.Async.WrappedAsyncResult`1.Begin(AsyncCallback callback, Object state, Int32 timeout) +129 System.Web.Mvc.Async.AsyncControllerActionInvoker.BeginInvokeAction(ControllerContext controllerContext, String actionName, AsyncCallback callback, Object state) +302 System.Web.Mvc.<>c__DisplayClass1d.<BeginExecuteCore>b__17(AsyncCallback asyncCallback, Object asyncState) +30 System.Web.Mvc.Async.WrappedAsyncResult`1.Begin(AsyncCallback callback, Object state, Int32 timeout) +129 System.Web.Mvc.Controller.BeginExecuteCore(AsyncCallback callback, Object state) +338 System.Web.Mvc.Async.WrappedAsyncResult`1.Begin(AsyncCallback callback, Object state, Int32 timeout) +129 System.Web.Mvc.Controller.BeginExecute(RequestContext requestContext, AsyncCallback callback, Object state) +316 System.Web.Mvc.Controller.System.Web.Mvc.Async.IAsyncController.BeginExecute(RequestContext requestContext, AsyncCallback callback, Object state) +15 System.Web.Mvc.<>c__DisplayClass8.<BeginProcessRequest>b__2(AsyncCallback asyncCallback, Object asyncState) +71 System.Web.Mvc.Async.WrappedAsyncResult`1.Begin(AsyncCallback callback, Object state, Int32 timeout) +129 System.Web.Mvc.MvcHandler.BeginProcessRequest(HttpContextBase httpContext, AsyncCallback callback, Object state) +251 System.Web.Mvc.MvcHandler.BeginProcessRequest(HttpContext httpContext, AsyncCallback callback, Object state) +48 System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.BeginProcessRequest(HttpContext context, AsyncCallback cb, Object extraData) +16 System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +103 System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +155 |
版本信息: Microsoft .NET Framework 版本:4.0.30319; ASP.NET 版本:4.7.2117.0
错误详情截图如下:
本人做的是基于.NET MVC的开发,采取办法是:
1. 只关闭需要关闭的action方法即在对应的方法上添加 [ValidateInput(false)]
2. 将窗体form接收的含有“<span >,font,.......”等等html标记的string进行HTML编码 string content = Server.HtmlEncode(form["content"]);,从数据库回显的时候使用Server.HtmlDecode进行解码即可。
本人小白,但验证此方法确实可行。大神可以忽略!