我需要提供来自其他网页的第三方 asmx 服务中公开的数据,以便在我自己的 API 上使用它。我使用 NET 7.0 创建 API。要访问这个asmx服务的URL,需要先在网站登录(User,Password),然后是4个参数(Proportioned->obj,lang,user和password)访问方法。预期的响应必须是 JSON 响应,才能附加并映射它。 SOAP 客户端实际上已实现,但由于未添加登录,它会给出错误响应,因为我不知道具体是如何实现的。代码方案为:
客户类
public class Repository : IRepository
{
private readonly IConfiguration _configuration;
public readonly string serviceUrl = Constants;
public readonly EndpointAddress endpointAddress;
public readonly BasicHttpBinding basicHttpBinding;
public Repository(IConfiguration configuration)
{
_configuration = configuration;
endpointAddress = new EndpointAddress(serviceUrl);
basicHttpBinding = new BasicHttpBinding(endpointAddress.Uri.Scheme.ToLower() == "http" ? BasicHttpSecurityMode.None : BasicHttpSecurityMode.Transport);
basicHttpBinding.OpenTimeout = TimeSpan.MaxValue;
basicHttpBinding.CloseTimeout = TimeSpan.MaxValue;
basicHttpBinding.ReceiveTimeout = TimeSpan.MaxValue;
basicHttpBinding.SendTimeout = TimeSpan.MaxValue;
}
public async Task<json_ws_biisSoapClient> GetInstanceAsync()
{
return await Task.Run(() => new json_ws_biisSoapClient(basicHttpBinding, endpointAddress));
}
public async Task<Response<string>> BIISAsync(string obj, string lang, string user, string password)
{
Response<string> response = new Response<string>();
try
{
//Login method should go here (?)
//ASMX service method that serves API SOAP
var client = await GetInstanceAsync();
await client.BIISAsync(obj, lang, user, password);
DataTable dt = new DataTable();
dt = JsonConvert.DeserializeObject<DataTable>("");
response.Data = dt.ToString();
response.code = 0;
}
catch (Exception ex)
{
response.code = 500;
response.message = ex.Message;
}
return response;
}
}
客户端界面
public interface IRepository
{
Task<json_ws_biisSoapClient> GetInstanceAsync();
Task<Response<string>> BIISAsync(string obj, string lang, string user, string password);
}
我正在考虑创建 2 个独立的客户端,但这是多余的,我需要帮助来实现这个。 任何建议将不胜感激。
SOAP 客户端在执行后,给出一个不太清晰的 html 响应,但有意义的是不起作用,因为它没有任何登录实现。邮递员也一样。