我应该在进行jQuery ajax调用之前编码数据吗?

时间:2014-06-18 00:09:25

标签: jquery ajax asp.net-mvc antixsslibrary

在我的ASP.NET MVC 5应用程序中,我正在从表单中读取一些数据,然后在后端对操作方法进行jQuery ajax调用,以将其保存到我的数据库中。

在表单中,如果我在其中输入带有HTML标记的文本,我会因HTML标记而出错。我得到了标准" ......有潜在危险......"错误。

我使用GetSafeHtmlFragment()清理后端数据,但是一旦数据到达我的操作方法就会生成错误。

从客户端脚本向我的操作方法发送数据的正确方法是什么? jquery ajax打电话?我首先在我的JS事件处理程序中对数据进行HTML编码,然后将其发送到我的操作方法吗?

1 个答案:

答案 0 :(得分:1)

无论是客户端脚本(XHR)还是直接HTTP请求,ASP.Net运行时都使用Request Validation来阻止请求。

好吧,在MVC中,这会在您到达Action方法中的GetSafeHtmlFragment()之前发生。您需要做的是关闭期望带有标记的数据的操作方法的请求验证。

您对how you want to turn off the Request Validation进行了细粒度的控制。

  1. 如果您有一个Model类,其中您的标记数据是属性 - 使用[AllowHtml]属性来修饰该Model的属性,因此请求验证不会应用于该属性

  2. 如果要关闭Action方法或整个控制器的请求验证,请使用[ValidateInput(false)]作为Action方法或Controller本身。

  3. 没有堆栈跟踪或更多细节,这是我能想到的最佳答案。只要您了解允许标记(包括潜在危险的标记)作为数据,关闭请求验证就不错了。

    由于您已经拥有GetSafeHtmlFragment(),因此请关闭特定属性的Request Validation或Action方法。而且,对于微软的Antixss库作为消毒剂,你应该注意以下几点: