【问题标题】:Calling asmx web service using JQuery with parameters causes 500 error使用带参数的 JQuery 调用 asmx Web 服务会导致 500 错误
【发布时间】:2013-02-11 20:55:43
【问题描述】:

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

        [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 Internal Server Error。我在 web 服务中放置了一个断点,并且根本没有到达代码。当我修改 Web 服务以完全不接受任何参数(并从 JQuery 调用中删除 data 元素)时,调用成功。我玩过不同的方法来传递data 元素;我已经传递了一个 JSON 对象(没有引号),并且我已经从 a 参数周围删除了引号。都不行。

编辑:

使用 Fiddler,我确定导致 500 的实际错误是“无效的 Web 服务调用,参数缺失值”。

编辑 2:

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

data: "a='test'"

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

【问题讨论】:

  • 您是否在 GetToken 方法中返回任何内容,只是没有显示?
  • @Decker97 - 是的,我是。 Web 服务返回一个字符串。

标签: c# web-services jquery asmx


【解决方案1】:

尚未对此进行测试,但在您的代码 sn-p 中,您使用的是 post: 'GET' 而不是 type: 'GET'。这可能会导致服务器将 contentType 拒绝为 json(这就是您的数据未正确序列化的原因)。

【讨论】:

  • 我不敢相信我错过了!谢谢!
  • 盯着同一个代码看太久的经典案例……一直在我身上发生。
【解决方案2】:

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

【讨论】:

  • 按照你的要求做了。实际错误是“无效的 Web 服务调用,参数缺失值”
【解决方案3】:

我无法使用 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);
        }
    });

【讨论】:

  • 我刚刚这样做了,结果如下:“尝试使用 GET 请求调用该方法 .....,这是不允许的。” ,即使我将类型更改为“POST”。
  • 另请注意,我将 .asmx 扩​​展名放在页面名称上。
  • 是的,我的也有。这真的很奇怪:(
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-23
  • 1970-01-01
  • 2011-03-31
  • 1970-01-01
  • 2018-05-20
  • 1970-01-01
相关资源
最近更新 更多