0

我正在开发 .NET 4.0 MVC 项目。我正在尝试 Ajax 从我的 KO 模型中发布一条数据。该数据是以下 XML 格式的字符串。

<SearchCriteria><Criteria SearchOn="Name" SearchValue="test 3" /></SearchCriteria>

我正在尝试像这样发布它。

$.ajax({
        url: destUrl,
        data: ko.toJSON(DataToPost()),
        type: "POST",
        success: function (result) {
            // I am doing my stuff here.
            }
        },
        error: function (request, textStatus, errorThrown) {
            alert(request.statusText);
        }
    });

在这里您会注意到正在发送的数据是"ko.toJSON(DataToPost())". DataToPost()返回包含在我的数据成员中的XML字符串。用于将数据转换为.KO modelDataToPostko.toJSON()KO modelJSON

这会引发运行时异常,通常thrown在我们发布任何包含javascripthtml标签的内容时。这是.NET. 以下是例外。

A potentially dangerous Request.Form value was detected from the client.

&lt;SearchCriteria&gt;&lt;Criteria SearchOn=&quot;...est 3\&quot; /&gt;&lt;/SearchCriteria&gt;

我有时会遇到类似的情况(尽管我没有使用KO那个时间,而且这是正常的帖子,即非Ajax)。我当时通过使用克服了这个问题,javascript escape()但这次是它failed。我使用它如下

$.ajax({
    url: destUrl,
    **data: ko.toJSON(escape(SearchCriteria()))**,
    type: "POST",
    success: function (result) {
        // I am doing my stuff here.
        }
    },
    error: function (request, textStatus, errorThrown) {
        alert(request.statusText);
    }
});

其他流行的修复方法是在页面级别或应用程序级别禁用此安全性。可以按如下方式进行。

页面级别。

<%@ Page validateRequest="false" %> 

应用层。

<configuration>
   <system.web>
      <pages validateRequest="false" />
   </system.web>
</configuration>

但是取消这种安全性并不好。我认为这不是明智之举。现在我不知道该怎么办。需要建议。

提前致谢!

4

3 回答 3

0

我意识到格式化字符串很难,serialize因此XMLXML决定发布 List ofKey value pair而不是格式化字符串。这种方法运行良好。

于 2012-05-24T09:55:33.660 回答
0

嘿,只需将该 xml 作为字符串传递并在服务器端对其进行解码,而不是在客户端对其进行序列化。您也可以发布您的 html,因为我相信您可以在按钮提交时做错事。

于 2012-05-24T10:16:13.970 回答
0

这不是一个真正的淘汰赛问题。这实际上是关于将 xml 数据发布到 asp.net。请求验证在 beginRequest 之前在 .NET 4.0 中启动。将您的 web.config 更改为此。

<httpRuntime requestValidationMode="2.0"/>

现在将该ValidateInput属性添加到您的特定操作方法中。

[ValidateInput(false)]

这应该允许数据通过而不会影响您的整个站点请求验证。

希望这可以帮助。

于 2012-05-22T00:09:50.160 回答