如何用.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
相关产品推荐
相关产品推荐

