无法将html内容发送到Web服务,导致找不到错误

时间:2014-05-22 08:13:49

标签: javascript asp.net json web-services wcf

我正在尝试将html内容作为字符串发送到网络服务但是如果我发送了一个简单的字符串(例如" test"),则会发现同一个调用失败但未找到错误。

网络服务代码:

public string List(DateTime showdate, string viewtype, int timezone, string test)
{
    ------ whatever ------
}

Javascript代码:

var showdate = "22/05/2014",
    viewtype =  "rest",
    timezone = 2,
    test = $("body").html(); // if i change to something like: test = "My name is Inigo Montoya" it works fine.

$.ajax({
    type: option.method,
    url: option.url,
    data: {"showdate": showdate, "viewtype": viewtype, "timezone": timezone, "test": test},
    success: function(data){ //--- whatever --- },
    error: function(data){ //--- whatever --- }
});

3 个答案:

答案 0 :(得分:1)

您可以在代码测试页面上打开chrome检查器,然后直接粘贴上面的javascript代码以查看返回的错误类型。

我现在可以想到2个问题:

网址过长

用于触发ajax调用的jQuery代码应该没问题,但是这两个参数typedata会导致问题。

例如,如果$("body").html()超过2000个字符且请求方法设置为GET,则ajax调用将不起作用,因为URL太长而浏览器无法理解。

鉴于你提到了

  

如果我更改为:test =“我的名字是Inigo Montoya”它可以正常工作。

我相信这个问题的可能性非常高。

跨域ajax

如果目标位置是外部域,他们可能会拒绝您的AJAX调用访问。

与上述相同,强烈建议您通过Chrome检查程序检查此问题。

答案 1 :(得分:0)

试试这个,因为你在web服务和json下标记,希望这应该适合你,

var data={"showdate": showdate, "viewtype": viewtype, "timezone": timezone, "test": test};
var jsonData= JSON.stringify(data);
$.ajax({
    type: option.method,
    url: option.url,
    data: jsonData,
    success: function(data){ //--- whatever --- },
    error: function(data){ //--- whatever --- }
});

答案 2 :(得分:0)

我相信您可能正在使用ASP的内置请求验证,该验证用于阻止XSS(跨站点脚本)。

默认情况下,发布包含HTML的字段可能会导致拒绝请求。

  

请求验证是ASP.NET中的一项功能,用于检查HTTP请求并确定其是否包含具有潜在危险的内容。在此上下文中,潜在危险的内容是正文中的任何HTML标记或JavaScript代码,标题,查询字符串或请求的Cookie。 ASP.NET执行此检查是因为URL查询字符串,cookie或已发布的表单值中的标记或代码可能已添加用于恶意目的。

有关详细信息,请查看this MSDN page

请注意,可以禁用单个字段的请求验证,而不是在站点范围内执行...

(摘自this Stack Overflow question

在控制器操作上:

[ValidateInput(false)]
ActionResult SomeAction(string validationIgnored){...}

或特定的模型属性:

[AllowHtml]
string SomeProperty {get; set;}

请注意,此保护是出于某种原因,如果您将其禁用,则您自行承担验证输入的责任。请查看this blog post by Rick Strahl的一些建议和备选方案。