如何在ASP.NET Core控制器中读取JSON获取request_id字段值
实现方法
你只需要对接口返回的JSON字符串做解析,就能提取request_id字段赋值给ReqID变量,以下是两种常用实现方式:
方式1:强类型反序列化(推荐,可维护性高)
首先定义和接口返回结构匹配的响应模型:
public class SmsProviderResponse { [System.Text.Json.Serialization.JsonPropertyName("request_id")] public string RequestId { get; set; } [System.Text.Json.Serialization.JsonPropertyName("number")] public string Number { get; set; } [System.Text.Json.Serialization.JsonPropertyName("price")] public decimal Price { get; set; } }
修改你的控制器逻辑,在拿到接口响应后反序列化取值即可:
public async Task<ActionResult> RequestAuthenticate() { var client = new RestClient("https://api.mysmsprovider.com/v1/verify"); var request = new RestRequest("",Method.Post); request.AddHeader("Accept", "application/json"); request.AddHeader("Content-Type", "application/x-www-form-urlencoded"); request.AddParameter("application/x-www-form-urlencoded", "api_secret=123M&api_key=84545&code_length=4&from=NBL&to=90000001", ParameterType.RequestBody); // 注意:你方法标记了async,这里建议用异步执行方法,避免阻塞线程 RestResponse response = await client.ExecuteAsync(request); // 反序列化响应内容 var responseData = System.Text.Json.JsonSerializer.Deserialize<SmsProviderResponse>(response.Content); // 赋值给目标字符串变量,加空判断避免异常 string ReqID = responseData?.RequestId ?? string.Empty; // 后续可自行编写ReqID相关的业务逻辑,示例是返回ReqID和原始响应 return Ok(new { ReqID, OriginResponse = response.Content }); }
方式2:轻量节点解析(无需额外定义类)
如果不想单独建响应模型,可以直接通过JSON DOM解析提取字段:
// 在获取到response之后添加以下代码 using var jsonDoc = System.Text.Json.JsonDocument.Parse(response.Content); string ReqID = jsonDoc.RootElement.TryGetProperty("request_id", out var reqIdEl) ? reqIdEl.GetString() ?? string.Empty : string.Empty;
注意事项
- 解析时建议加空值/字段存在性校验,避免接口返回异常格式时触发空引用、字段不存在的运行时错误
- 如果你项目用的是Newtonsoft.Json做序列化,替换对应序列化/解析的API即可,逻辑完全一致
内容的提问来源于stack exchange,提问作者Sulfy
相关产品推荐
相关产品推荐

