0

我有一个带有字符串参数的 ASP.NET Web 服务 (asmx) 函数。如果 dataType 未设置为 json (ValidateRequest="true"),则内置请求验证应捕获 HTML 标记,并且在使用自动生成的 localhost 测试页面或使用 jQuery 的 ajax/post 时有效。

WithdataType:"json" HttpRequestValidationException没有被触发:

$.ajax({
    type: "POST",
    url: "/my.asmx/SetName",
    data: '{"name":"' + $("#name").val() + '"}',
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    async: false
});

如果我删除contentTypedataType得到预期的HttpRequestValidationException.

这让我的 ws 很脆弱。不幸的是,WCF 不是一种选择。

4

1 回答 1

0

这是设计使然。仅验证 HttpRequest 的 Path、PathInfo、RawUrl、Cookies、Form、QueryString 和 File。您也可以使用自定义请求验证器验证标头。

删除 contentType 时完成请求验证的原因是因为 JQuery 默认它application/x-www-form-urlencoded是一个表单帖子 (HttpRequest.Form)

于 2013-11-27T03:51:40.937 回答