繁体   English   中英

ASP.NET 核心 Web API - 第三方 API 未给出预期结果

[英]ASP.NET Core Web API - Third Party API not giving expected result

在我的 ASP.NET Core-6 Web API 给我一个第三方 API 消费然后返回账户明细。 我正在使用网络客户端。

api:

https://api.thirdpartycompany.com:2233/UserAccount/api/AccountDetail?accountNumber=112123412

标头:

X-GivenID:Given2211
X-GivenName:Givenyou
X-GivenPassword:Given@llcool

然后 JSON 结果如下图:

{
  "AccountName": "string",
  "CurrentBalance": 0,
  "AvailableBalance": 0,
  "Currency": "string"
}

到目前为止,我已经这样做了:

余额查询响应:

public class BalanceEnquiryResponse
{
    public string Response
    {
        get;
        set;
    }

    public bool IsSuccessful
    {
        get;
        set;
    }

    public List<BalanceList> AccountBalances
    {
        get;
        set;
    }
}

余额列表:

public class BalanceList
{
    public string AccountNumber
    {
        get;
        set;
    }

    public decimal CurrentBalance
    {
        get;
        set;
    }

    public decimal AvailableBalance
    {
        get;
        set;
    }

    public string Currency
    {
        get;
        set;
    }
}

然后服务如下图所示。

数据服务:

public interface IDataService
{
    BalanceEnquiryResponse GetAccountBalance(string accountNo);
}
public class DataService : IDataService
{
    private readonly ILogger<DataService> _logger;
    private readonly HttpClient _myClient;
    public DataService(ILogger<DataService> logger, HttpClient myClient)
    {
        _logger = logger;
        _myClient = myClient;
        PrepareAPIHeaders(); // Actually apply the headers!
    }

    private void PrepareAPIHeaders()
    {
        _myClient.DefaultRequestHeaders.Add("X-GivenID", "Given2211");
        _myClient.DefaultRequestHeaders.Add("X-GivenName", "Givenyou");
        _myClient.DefaultRequestHeaders.Add("X-GivenPassword", "Given@llcool");
        _myClient.DefaultRequestHeaders.TryAddWithoutValidation("Content-Type", "application/json; charset=utf-8");
        _myClient.DefaultRequestHeaders.TryAddWithoutValidation("Accept", "application/json; charset=utf-8");
    }

    // If you want to use async API, you need to go async all the way.
    // So make this Method async, too!
    public async Task<BalanceEnquiryResponse> GetAccountBalance(string accountNo)
    {
        _logger.LogInformation("Accessing Own Account");
        var url = $"https://api.thirdpartycompany.com:2233/UserAccount/api/AccountDetail?accountNumber={accountNo}";

        var response = await _myClient.GetAsync(url);
        // vv Get your payload out of the Http Response.
        var responseResults = await response.Content.ReadAsAsync<BalanceEnquiryResponse>();
        return responseResults;
    }
}

我用 POOSTMAN 上的标头测试了第三方 api:

https://api.thirdpartycompany.com:2233/UserAccount/api/AccountDetail?accountNumber=112123412

范围

标头

它给了我预期的结果。 但是根据我的代码,当我尝试从下面的代码调用GetAccountBalance时,我提供了 model.account_number:

public async Task<BaseResponse> FinalResult(RequestDto model)
{
    var response = new BaseResponse();
    try
    {
        //Check account Balance
        var accBalance = _dataAccess.GetAccountBalance(model.account_number);
        if (!accBalance.IsSuccessful)
        {
            response.response_code = "";
            response.response_description = "Could not fetch account for subscriber";
            return response;
        }
     }
}

我在以下位置收到此错误:

response.response_description = "无法获取订阅者的帐户";

我做错了什么,尤其是在public class DataService中,我该如何解决?

谢谢。

可能只是我们在谈论 GetCall 但有时我遇到直接在客户端层设置的标头的问题。 所以我会尝试根据请求设置它们,而不是客户端。

我在没有编辑的情况下写了这篇文章,所以我无法测试它。 但你应该了解我想做的事情的要点


 public async Task<BalanceEnquiryResponse> GetAccountBalance(string accountNo)
 {
        _logger.LogInformation("Accessing Own Account");
        var url = $"https://api.thirdpartycompany.com:2233/UserAccount/api/AccountDetail?accountNumber={accountNo}";
       using(var request = new HttpRequestMessage(HttpMethod.Get, url))
       {
            //add headers to the request not the client
            PrepareAPIHeaders(request);
            var result = await _myClient.SendAsync(request);
            result.EnsureSuccessStatusCode();
            
            /*Read response and parse it into an object and return*/
       }


        return null;
 }

    private void PrepareAPIHeaders(HttpRequestMessage request)
    {
        request.Headers.Add("X-GivenID", "Given2211");
        /*Add other Headers*/
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM