客户端传来了潜在危险的Request.Form值

7
我在运行ASP.Net MVC应用程序时遇到了以下错误。由于我是ASP.Net的新手,能否有人帮我解释一下这意味着什么,以及如何解决它?
我尝试谷歌搜索了解它,但对于同一错误找到了不同的答案,让我更加困惑。

Global.asax中捕获的异常:System.Web.HttpRequestValidationException (0x80004005): 从客户端检测到潜在危险的请求表单值(ctl00$MainContent$WarningCtl1$TXTWarningText="

This is the warning...")。 at System.Web.HttpRequest.ValidateString(String value, String collectionKey, RequestValidationSource requestCollection) at System.Web.HttpRequest.ValidateNameValueCollection(NameValueCollection nvc, RequestValidationSource requestCollection) at System.Web.HttpRequest.get_Form() at System.Web.HttpRequest.get_HasForm() at System.Web.UI.Page.GetCollectionBasedOnMethod(Boolean dontReturnNull) at System.Web.UI.Page.DeterminePostBackMode() at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) at System.Web.UI.Page.ProcessRequest(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) at System.Web.UI.Page.ProcessRequest() at System.Web.UI.Page.ProcessRequest(HttpContext context) at ASP.app_config_appttypes_groupappttypes_aspx.ProcessRequest(HttpContext context) at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)

请给出建议。

听起来你正在尝试接受HTML标记作为请求的一部分。页面上有所谓的所见即所得编辑器吗? - Chris
你尝试过给你的控制器类添加属性 [ValidateInput(false)] 吗? - Juraj Suchár
我将其放入我的web.config文件中,如下:<pages theme="Admin" controlRenderingCompatibilityVersion="4.0" clientIDMode="AutoID" validateRequest="false"/> - tech_human
3个回答

8

您需要在控制器中添加ValidateInputAttribute(它将应用于该控制器的所有操作方法,因此请小心):

[ValidateInput (false)]
public class MyController : Controller { ... }

或者您的动作方法:

public class MyOtherController : Controller
{
    [ValidateInput (false)]
    public ActionResult MyActionMethod (MyObjectThatTakesInHtml myObject)
    { ... }
}

编辑

正如@dotjoe所指出的,我忘记提到的是,您还可以在模型中的属性上访问AllowHtmlAttribute(位于System.Web.Mvc中)。

public class MyObjectThatTakesInHtml
{
    [AllowHtml]
    public string MyHtmlProperty { get; set; }
}

2
不要忘记 AllowHtml 属性 ;) - dotjoe
但是之后我仍然遇到了这个问题... [ValidateInput(false)] 和 validateRequest="False" 在 web.config 中的作用是否不同? - tech_human
@dotjoe 哦,忘了这个。 =D 谢谢。 - Jim D'Angelo
你怎么在VB.NET里添加[allowhtml]?我遇到了错误。 - tech_human
@dotjoe,我在这方面很快,试图匆忙处理它。感谢您的所有帮助和成为第二双眼睛。 - Jim D'Angelo
显示剩余4条评论

4
  • 在客户端进行编码,在服务器端进行解码

步骤

1.使用jquery提交方法提交表单。

在jquery按钮单击事件方法中,对要发送到服务器的字段进行编码。例如:

$("#field").val(encodeURIComponent($("#field").val())) $("#formid").submit();

在控制器级别上,使用以下方法访问所有表单id的值:
HttpUtility.UrlDecode(Request["fieldid"])

请确保控制器方法不带参数。


-1

MVC

在操作中添加了属性 [ValidateInput(false)]

并确认在 system.web 中的 web.config 设置


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接