当前位置: 首页 > news >正文

AbpvNext问题记录——post接口,接收前端发送的空串转换数字异常问题。

一、问题说明
1.前后端调试,发现通过post接口,采用json串发送的数据,如果后台的数据结构定义的是double,而前端传了空串“”,后台会因类型不吻合报错。
2.简单查询了下,找到了重写json转换方法的位置,记录一下。

HttpApiHostModule.cs

using System.Text.Json;
using System.Text.Json.Serialization;//配置位置的代码。public override void ConfigureServices(ServiceConfigurationContext context){//配置json转换器context.Services.AddControllers().AddJsonOptions(options =>{options.JsonSerializerOptions.Converters.Add(new NullableDoubleConverter());options.JsonSerializerOptions.IgnoreNullValues = true;});}
//重写对应类型的转换方法
public class NullableDoubleConverter : JsonConverter<double?>
{public override double? Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options){// 如果是 null 或 空值if(reader.TokenType == JsonTokenType.Null){return null;}if(reader.TokenType == JsonTokenType.String){string stringValue = reader.GetString();// 处理 ""、"null"、"undefined"if(string.IsNullOrWhiteSpace(stringValue) ||stringValue.Equals("null", StringComparison.OrdinalIgnoreCase) ||stringValue.Equals("undefined", StringComparison.OrdinalIgnoreCase)){return null;}// 尝试解析if(double.TryParse(stringValue, out double result)){return result;}throw new JsonException($"无法将字符串 '{stringValue}' 转换为 double。");}// 如果是数字if(reader.TokenType == JsonTokenType.Number){return reader.GetDouble();}throw new JsonException($"意外的 token 类型: {reader.TokenType},无法转换为 double?。");}public override void Write(Utf8JsonWriter writer, double? value, JsonSerializerOptions options){if(value.HasValue){writer.WriteNumberValue(value.Value);}else{writer.WriteNullValue();}}
}//后端接口样式public async Task<string> TestDoubleConvert([FromBody] TestClass? obj){return "接收到的值="+obj.TestA;}public class TestClass{public double? TestA { get; set; }}
http://www.dtcms.com/a/355968.html

相关文章:

  • Orgin绘制热力图
  • 财务报表包括哪些?一文讲清财务三大表
  • DMN6140L-13 电子元器件 Diodes美台N沟道增强型功率MOSFET
  • Codeforces Round 1043 (Div. 3) E. Arithmetics Competition
  • docker搭建Apisix和Apisix Dashboard
  • 智能仪表板DevExpress Dashboard v25.1新版亮点:增强数据管理功能
  • rk键盘 用蓝牙链接 教程
  • 实战演练(一):从零构建一个功能完备的Todo List应用
  • C++(Qt)软件调试---vcpkg安装crashpad(34)
  • 金融Agent+LLM的特性分析与调研
  • C#并行计算(SIMD)应用
  • illustrator-02
  • 洛谷 P2568 GCD-提高+/省选−
  • 「Java EE开发指南」如何使用MyEclipse启用自动JSP验证?
  • C语言————函数递归(通俗易懂)
  • logcat 网络日志解析
  • 二、开关电源的EMC改善措施
  • Python Imaging Library (PIL) 全面指南:PIL基础入门-图像处理与数据预处理
  • Maven 编译打包一个比较有趣的问题
  • yolo学习笔记01——前置基础
  • 【力扣】2715. 执行可取消的延迟函数
  • 生产环境Vue组件报错:Cannot access before initialization
  • 将 agents 连接到 Elasticsearch 使用模型上下文协议 - docker
  • 前后端分离情况下,将本地vue项目和Laravel项目以及mysql放到自己的云服务器
  • 工业 5G + AI:智能制造的未来引擎
  • Mybatis-增删改查
  • 逻辑回归以及损失函数
  • 数字孪生(Digital Twin):未来产业与城市的智慧引擎
  • AI Agent从0到1:剖析Block与GSK的两种产品化落地路径
  • 容器学习04-kubernetes(k8s)