You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用.NET Core从Microsoft D365 Finance and Operations导出数据并获取C#示例代码

C#/.NET Core 实现从Dynamics 365 Dequeue获取文件并保存到Azure Blob

依赖说明

需要安装以下NuGet包:

  • Azure.Storage.Blobs:用于Azure Blob存储操作
  • (System.Net.Http为.NET Core内置组件,无需额外安装)

核心实现代码

以下是封装好的服务类,包含Dequeue API调用和Azure Blob上传逻辑:

using Azure.Storage.Blobs;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Threading.Tasks;

public class DynamicsBlobProcessor
{
    private readonly HttpClient _httpClient;
    private readonly string _dequeueApiUrl;
    private readonly string _azureBlobConnectionString;
    private readonly string _blobContainerName;

    // 构造函数注入依赖,也可根据实际情况调整初始化方式
    public DynamicsBlobProcessor(HttpClient httpClient, string dequeueApiUrl, string azureBlobConnectionString, string blobContainerName)
    {
        _httpClient = httpClient;
        _dequeueApiUrl = dequeueApiUrl;
        _azureBlobConnectionString = azureBlobConnectionString;
        _blobContainerName = blobContainerName;

        // 配置Dynamics 365 API认证(示例为Bearer Token,需替换为实际认证方式)
        _httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", "YOUR_DYNAMICS_AUTH_TOKEN");
    }

    /// <summary>
    /// 调用Dequeue API获取处理后的文件并上传到Azure Blob
    /// </summary>
    /// <param name="blobFileName">保存到Blob时的文件名</param>
    /// <returns></returns>
    public async Task ProcessDequeuedFileToBlobAsync(string blobFileName)
    {
        // 1. 调用Dequeue API获取文件内容
        using var response = await _httpClient.GetAsync(_dequeueApiUrl);
        response.EnsureSuccessStatusCode(); // 抛出HTTP请求失败的异常

        // 2. 读取响应流(假设API返回文件二进制内容)
        using var fileStream = await response.Content.ReadAsStreamAsync();

        // 3. 上传到Azure Blob
        var blobServiceClient = new BlobServiceClient(_azureBlobConnectionString);
        var blobContainerClient = blobServiceClient.GetBlobContainerClient(_blobContainerName);
        await blobContainerClient.CreateIfNotExistsAsync(); // 确保容器存在

        var blobClient = blobContainerClient.GetBlobClient(blobFileName);
        await blobClient.UploadAsync(fileStream, overwrite: true);
    }
}

使用示例

在控制台应用或Web应用中使用该服务:

// 初始化HttpClient(建议使用IHttpClientFactory注入,避免手动创建导致的资源问题)
var httpClient = new HttpClient();

// 替换为实际参数
var dequeueApiUrl = "https://[base URL]/api/connector/dequeue/";
var azureBlobConnStr = "YOUR_AZURE_BLOB_CONNECTION_STRING";
var blobContainerName = "your-container-name";

var processor = new DynamicsBlobProcessor(httpClient, dequeueApiUrl, azureBlobConnStr, blobContainerName);

// 执行操作(可根据业务逻辑调整触发时机,比如定时轮询、事件触发等)
await processor.ProcessDequeuedFileToBlobAsync("processed-dynamics-file.csv");

注意事项

  • 认证方式:根据Dynamics 365 API的实际要求调整认证逻辑,比如使用OAuth 2.0获取Token,而非硬编码。
  • Dequeue API逻辑:需确认API的返回格式(是否直接返回文件流、是否需要额外参数),如果API返回JSON包含文件下载链接,需调整代码先解析JSON再下载。
  • 错误处理:可根据业务需求扩展异常捕获逻辑,比如重试机制、日志记录等。
  • HttpClient管理:在实际项目中建议使用IHttpClientFactory注入HttpClient,避免频繁创建实例导致的资源泄漏。

内容的提问来源于stack exchange,提问作者DnyaneshSurya

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 04:45:34