如何在Abp框架的应用层使用外部REST API?

问题描述 投票:0回答:1

我正在使用分层 ABP 框架版本 7。
我想从 localhos:6767 url 调用外部

REST API
服务。

外部应用程序也使用 swagger,所以我确切地知道数据应该如何构造。

问: 仅在应用层调用和使用 REST API 的最佳实践是什么,而不向我的项目添加额外的块包?

请注意,我已经检查了 documentation 。然而,遵循这一点并不容易。如果可以的话,请提供一个简单的例子。

c# .net rest asp.net-core abp-framework
1个回答
0
投票

由于一年来没有提供答案,我想提供我的简单解决方案(以防其他人偶然发现这个问题)。

我已经为请求和响应创建了一个 DTO,参考 swagger。 然后我基本上使用旧的 HttpClient 通过 REST 发送和接收数据。

这是一个示例方法:

public async Task<InvoiceDto> CeateInvoiceOverRpc(CreateInvoiceDto input, int frm, bool vatIncluded)
{
    using var client = new HttpClient();
    try
    {
        string URL = BaseURL + $"/api/app/invoices/new-invoice-with-params?firm={frmNo.ToString()}&vatIncluded={vatIncluded}";

        var json = JsonSerializer.Serialize(input);
        var content = new StringContent(json, Encoding.UTF8, "application/json");

        var response = await client.PostAsync(URL, content);

        if (!response.IsSuccessStatusCode)
        {
            var errorResponse = await response.Content.ReadFromJsonAsync<ErrorResponse>();

            _logger.LogError("Error on REST API call: Code={Code}, Message={Message}, Details={Details}",
                errorResponse.Error.Code,
                errorResponse.Error.Message,
                errorResponse.Error.Details);

            throw new UserFriendlyException(
            $"Message: {errorResponse.Error.Message}, InvoiceNumber: {input.InvoiceNumber}, Frm: {frmNo}, " +
            $"Code: {errorResponse.Error.Code}, Details: {errorResponse.Error.Details}. "
            );
        }

        response.EnsureSuccessStatusCode();
        var responseData = await response.Content.ReadFromJsonAsync<SayimFicheWithExtraDetail>();

        return responseData;
    }
    catch (HttpRequestException ex)
    {
        _logger.LogError(ex, "An HttpRequestException occurred while sending the request.");
        throw new UserFriendlyException(
            $"An HttpRequestException occurred while sending the request. InvoiceNumber: {input.InvoiceNumber}, Frm: {frmNo}, "
            );
    }
    catch (Exception ex)
    {
        _logger.LogError(ex, "An unexpected error occurred.");
        throw new UserFriendlyException(
            $"An unexpected error occurred" +
            $"--> {ex.Message} "
            );
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.