从 Web 服务 (ASMX) 调用第三方 API

Posted

技术标签:

【中文标题】从 Web 服务 (ASMX) 调用第三方 API【英文标题】:Thirdparty API invoke from Web Service (ASMX) 【发布时间】:2020-06-28 08:08:26 【问题描述】:

我有一个从第三方应用程序调用 API 的场景。但是由于请求是通过使用 HTTPClient,它是异步的,因此我无法向 Ajax 请求返回正确的值。

这是我的代码

    [WebMethod]
    public string getSampleData()
    

        string url = "https://api.thirdparty.com/eport/?Key=200&resultsPerPage=1000";


        using (HttpClient client = new HttpClient(new HttpClientHandler())) 
        
            var plainTextBytes = System.Text.Encoding.UTF8.GetBytes("sabcd@test.com:TEst12345");// ("sabcd@test.com:Pwd123"); 
            string val = System.Convert.ToBase64String(plainTextBytes);
            client.DefaultRequestHeaders.Add("Authorization", "Basic " + val);

            ServicePointManager.Expect100Continue = true;
            ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;

            try
            
                using (HttpResponseMessage response = await client.GetAsync(url))
                
                    response.EnsureSuccessStatusCode();
                    string responseBody = await response.Content.ReadAsStringAsync();
                    string k = responseBody;
                    return k;
                
                return "";
            
            catch (Exception ex)
            
                return ex.Message;
            


        


    

但它只是触发错误,因为 await 在那里不起作用。那么我怎样才能明智地处理这种情况而不会遇到任何麻烦。

这是我的 AJAX 调用 $('#btn_keyedin').click(function ()

        $.ajax(
            url: '../webservice1.asmx/getSampleData',
            type: 'POST',
            contentType: 'application/json',
            datatype: 'JSON',
            success: function (data) 
                console.log(JSON.stringify(data));
            ,
            error: function () 
            
        );
    );

请帮忙解决这个问题

【问题讨论】:

对于同步方法,您可以使用 GetAsync(url).GetAwaiter().GetResult()。这和 await 做的完全一样,但是是同步的 “但它只是触发错误,因为 await 在那里不起作用。”。错误是什么?是编译时错误还是运行时错误? @SirOneOfMany 非常感谢伙计.. 这就像一个魅力! @OguzOzgul 该错误很明显,因为在非异步函数中有等待。这就是为什么我没有指定 【参考方案1】:

await 关键字只能在async 方法中使用。据我所知,WebMethod 不能是异步的。您必须将您的 awaits 更改为 .Result 或其他人所说的 .GetAwaiter().GetResult()

【讨论】:

以上是关于从 Web 服务 (ASMX) 调用第三方 API的主要内容,如果未能解决你的问题,请参考以下文章

asmx 到 WCF 或 Web API

无法从 .net 中的 Ajax 调用 .asmx Web 服务

使用 JSON 从 AJAX 和 JQuery 调用简单的 Web 服务(.asmx 文件) - 解析错误

使用 Response.Write JSON 输出从 Jquery 调用 c# asmx Web 服务

是否有任何受支持的方式可以从跨平台 Xamarin 代码调用 asmx Web 服务?

如何从 2.0 asmx Web 服务返回 JSON