ASP.NET Core Web API-如何使用httpclient消费第三方API

发布于 2025-01-30 12:51:11 字数 2987 浏览 3 评论 0原文

在我的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"
}

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

Balanceenquiryresponse:

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

    public bool IsSuccessful
    {
        get;
        set;
    }

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

Balancelist:

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

    public decimal CurrentBalance
    {
        get;
        set;
    }

    public decimal AvailableBalance
    {
        get;
        set;
    }

    public string Currency
    {
        get;
        set;
    }
}

然后服务如下所示。

idataservice:

public interface IDataService
{
    BalanceEnquiryResponse GetAccountBalance(string accountNo);
}

dataService:

public class DataService : IDataService
{
    private readonly ILogger<DataService> _logger;
    private readonly HttpClient _myClient;
    public DataService(ILogger<DataService> logger, HttpClient myClient)
    {
        _logger = logger;
        _myClient = myClient;
    }

    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");
    }

    public BalanceEnquiryResponse GetAccountBalance(string accountNo)
    {
        _logger.LogInformation("Accessing Own Account");
        var url = $"https://api.thirdpartycompany.com:2233/UserAccount/api/AccountDetail?accountNumber={accountNo}";
        var responseResults = new BalanceEnquiryResponse();
        var response = await _myClient.GetAsync(url);
        return response;
    }
}

返回与URL,标头和BalanceenquiryResponse有关的响应

使用httpclient,我想首次尝试使用httpclient //www.tutorialsteacher.com/webapi/consuming-web-api-in-dotnet-usis-using-httpclient“ rel =“ nofollow noreferrer”>使用httpclclient在.NET中消耗Web

API :

Cannot implicitly convert type 'System.Net.Http.HttpResponseMessage' to 'BalanceEnquiryResponse'

响应返回响应中突出显示

如何纠正错误并在返回响应中实现目标。

谢谢。

In my ASP.NET Core-6 Web API, I am given a third party API to consume and then return the account details.

api:

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

Headers:

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

Then JSON Result is shown below:

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

So far, I have done this:

BalanceEnquiryResponse:

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

    public bool IsSuccessful
    {
        get;
        set;
    }

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

BalanceList:

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

    public decimal CurrentBalance
    {
        get;
        set;
    }

    public decimal AvailableBalance
    {
        get;
        set;
    }

    public string Currency
    {
        get;
        set;
    }
}

Then the service is shown below.

IDataService:

public interface IDataService
{
    BalanceEnquiryResponse GetAccountBalance(string accountNo);
}

DataService:

public class DataService : IDataService
{
    private readonly ILogger<DataService> _logger;
    private readonly HttpClient _myClient;
    public DataService(ILogger<DataService> logger, HttpClient myClient)
    {
        _logger = logger;
        _myClient = myClient;
    }

    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");
    }

    public BalanceEnquiryResponse GetAccountBalance(string accountNo)
    {
        _logger.LogInformation("Accessing Own Account");
        var url = 
quot;https://api.thirdpartycompany.com:2233/UserAccount/api/AccountDetail?accountNumber={accountNo}";
        var responseResults = new BalanceEnquiryResponse();
        var response = await _myClient.GetAsync(url);
        return response;
    }
}

Using HttpClient, I want to return a response in connection with the url, headers and BalanceEnquiryResponse

For the first time I am trying to consume third party API using HttpClient, and I'm following this Consume Web API in .NET using HttpClient

So far, I got this error:

Cannot implicitly convert type 'System.Net.Http.HttpResponseMessage' to 'BalanceEnquiryResponse'

and response is highlighted in return response

How do I correct the error and also achieve my goal in returning the response.

Thanks.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

沫尐诺 2025-02-06 12:51:11

基于您的班级,这些小更改应该使您处于修复其余部分的位置:

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;
    }
}

Based on your class, these small changes should put you in the position to fix the rest:

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 = 
quot;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;
    }
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文