使用带参数的JQuery调用asmx Web服务会导致500错误

时间:2013-02-11 20:55:43

标签: c# web-services jquery asmx

我有一个足够简单的网络服务:

        [ScriptMethod(UseHttpGet = true, ResponseFormat = ResponseFormat.Json)]
        [WebMethod]
        public string GetToken(string a)
        {
        }

我正在使用JQuery将其称为客户端:

    $.ajax({
        post: 'GET',
        contentType: "application/json; charset=utf-8",
        dataType: 'json',
        url: '../url/GetToken',
        data: "{'a':'test'}",
        success: function (data) {
        },
        error: function (a, b, c) {
        }
    });

调用始终失败,返回的错误是500内部服务器错误。我在Web服务中放置了一个断点,代码根本没有到达。当我修改Web服务以完全不参数(并从JQuery调用中删除data元素)时,调用成功。我用不同的方法来传递data元素;我已经传递了一个JSON对象(没有引号),我已经从a参数周围删除了引号。它都不起作用。

编辑:

使用Fiddler我已经确定导致500的实际错误是"无效的Web服务调用,参数&#34的缺失值。

编辑2:

以这种方式传递数据有效:

data: "a='test'"

我不知道为什么。有什么想法吗?

3 个答案:

答案 0 :(得分:3)

尚未对此进行测试,但在您的代码段中,您有post: 'GET'而不是type: 'GET'。这可能导致服务器拒绝将contentType作为json(这就是为什么你的数据没有被正确序列化)。

答案 1 :(得分:2)

您可以使用Fidler之类的工具来检查您要回复的回复。很可能会返回一个错误页面,但由于它是一个jquery ajax调用,你没有看到它。

答案 2 :(得分:2)

我无法使用GET,必须使用POST作为类型,而我的Web服务位于同一目录中,但这有效:

    $.ajax({
        type: 'POST',
        contentType: "application/json; charset=utf-8",
        dataType: 'json',
        url: 'url.asmx/GetToken',
        data: "{'a':'test'}",
        success: function(data) {
            alert("Success");
        },
        error: function(a) {
            alert(a.responseText);
        }
    });