无效 JSON 文字:从 Angular8 调用 ASMX 服务时的 xxx

Invalid JSON literal: xxx when calling ASMX service from Angular8

我在使用 Angular 8 调用 ASMX 网络服务时遇到问题。我看到从 Ajax 调用时出现相同错误的解决方案,也许类似的解决方法会有所帮助,但我不知道如何解决在 NG 中做到这一点。

问题:

当我使用字符串参数调用 ASMX 网络服务时,出现 "Invalid JSON literal: xxx" 错误。从 Ajax 开始,解决方案是 JSON.stringify() 数据,这些数据实际上是 web 服务调用的参数。但我不知道如何在 Angular.

中做到这一点

我试图将 HttpParams 对象字符串化,但它不起作用,因为它不符合选项定义。此外,当我尝试删除 'Content-Type': 'application/json' 时,我 运行 陷入另一个错误,我无法 运行 来自 Angular.[=13= 的网络服务]

这里是 angular 中的 webservice 调用代码:

    const options = { headers: new HttpHeaders({
                      'Access-Control-Allow-Origin': '*',
                      'Content-Type': 'application/json',
                      'Access-Control-Allow-Methods': 'GET, POST, OPTIONS',
                      'Access-Control-Allow-Headers': 'Origin, Content-Type, X-Auth-Token'
                    }),
                    params: new HttpParams().set('Page', page.toString())
                                            .set('Count', count.toString())
                                            .set('Filter', (filter === undefined ? '' : filter))
                                            .set('FilterClub', (filterClub === undefined ? '' : filterClub))
     };

    return this.http.get<PlayerResponse>(this.listUrl, options)
          .pipe();

也许 web 服务定义对您也有一些用处(仅 C# 代码的开头):

        [WebMethod]
        [ScriptMethod(UseHttpGet = true, ResponseFormat = ResponseFormat.Json)]
        public PlayerData List(int Page = 1, int Count = 20, string Filter = "", string FilterClub = "")
        {

我希望网络服务也能够 运行 使用字符串参数。有趣的是,如果我只使用整数参数,webservice 会被正确调用并且 returns 正确的数据。换句话说,从上面的例子来看,当我不过滤字段 Filter 和 FilterClub 时,(&Filter=&FilterClub=),网络服务 returns 数据如预期的那样。

谁能告诉我我做错了什么?非常感谢任何帮助。

我几乎尝试了所有方法。不幸的是,我唯一没有尝试的是在参数值周围添加引号。我没想到它会起作用,但它确实起作用了。所以这里是如何在使用 application/json Content-Type 调用 ASMX webservice 时发送字符串文字的解决方案:

    const options = { headers: new HttpHeaders({
                      'Access-Control-Allow-Origin': '*',
                      'Content-Type': 'application/json',
                      'Access-Control-Allow-Methods': 'GET, POST, OPTIONS',
                      'Access-Control-Allow-Headers': 'Origin, Content-Type, X-Auth-Token'
                    }),
                    params: new HttpParams().set('Page', page.toString())
                                            .set('Count', count.toString())
                                            .set('Filter', (filter === undefined ? '' : '\'' + filter + '\''))
                                            .set('FilterClub', (filterClub === undefined ? '' : '\'' + filterClub + '\''))
     };