如何将正常运行的C# POST请求代码改写为X++等效代码?
对应的X++ POST请求实现代码
以下是与你提供的C#代码功能等效的X++代码,适用于Dynamics 365 Finance & Operations环境:
static void SendPostRequest(Args _args) { System.Net.Http.HttpClient client; System.Net.Http.HttpRequestMessage request; System.Net.Http.StringContent content; System.Net.Http.HttpResponseMessage response; System.String jsonContent; System.String responseBody; System.Uri requestUri; System.Net.Http.Headers.MediaTypeHeaderValue contentType; // 初始化HTTP客户端 client = new System.Net.Http.HttpClient(); // 构建请求地址 requestUri = new System.Uri("http://localhost:8080/users"); // 创建POST请求实例 request = new System.Net.Http.HttpRequestMessage(System.Net.Http.HttpMethod::Post, requestUri); // 定义请求的JSON内容 jsonContent = "{\"id\":\"2\",\"name\":\"Karam\"}"; content = new System.Net.Http.StringContent(jsonContent); // 设置Content-Type头部为application/json contentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/json"); content.get_Headers().set_ContentType(contentType); // 绑定请求内容 request.set_Content(content); try { // 发送同步请求(X++环境中优先使用同步调用) response = client.SendAsync(request).Result; // 验证请求是否成功 response.EnsureSuccessStatusCode(); // 读取响应内容 responseBody = response.Content.ReadAsStringAsync().Result; // 在Infolog中输出响应结果 info(responseBody); } catch (Exception::CLRError) { // 捕获CLR异常并输出错误信息 error(AifUtil::getClrErrorMessage()); } finally { // 释放资源,避免内存泄漏 if (response) response.Dispose(); if (request) request.Dispose(); if (client) client.Dispose(); } }
关键说明:
- X中通过调用.NET的
System.Net.Http类库实现HTTP请求,逻辑和C#对齐但语法需符合X规范 - 因Dynamics 365运行环境限制,这里使用同步调用(通过
.Result获取异步任务结果),若需异步处理需结合Task上下文 - 必须确保AOS服务具备访问目标URL的网络权限
- 异常处理专门捕获CLR类型错误,通过
AifUtil::getClrErrorMessage()获取详细异常信息
内容的提问来源于stack exchange,提问作者Hasan A Yousef
相关产品推荐
相关产品推荐

