ASP.NET模型验证400错误排查:表单Indirizzo字段关联问题分析
解析这个.NET地址校验错误栈的含义
让我们一步步拆解这个错误信息,搞清楚它到底在传递什么问题:
1. 核心错误本质:HTTP 400 Bad Request
这个最外层的错误Errore EGON: The request failed with HTTP status 400: Bad Request直接说明:你的代码调用EGON外部服务时,发送的请求不符合该服务的要求,被服务端直接拒绝处理了。结合你的场景,问题肯定出在地址相关的参数上。
2. 错误的触发链路
错误栈清晰地展示了代码的调用路径:
- 最底层的异常抛出点是
SSOService.Models.EgonModel.Validate()方法(位于D:\Progetti\Nordcom\SSOSolution\trunk\SSOService\Models\EgonModel.cs:line 65)。这个方法是直接和EGON服务交互的校验入口,就是在这里发起请求后收到了400错误。 - 而这个方法是被上层的
Validations.ValidateAddressEgon_internal()方法(位于Validations.cs:line 1171)调用的。这个内部方法负责把表单里的各个地址字段(Indirizzo街道、civico门牌号、cap邮编、provinciaStr省、cittaStr市等)整理成EGON服务需要的参数格式,再传递给EgonModel.Validate做校验。
3. 结合你的业务问题的推测
你提到Indirizzo字段和其他地址字段存在关联问题,结合错误栈来看,大概率是以下情况之一:
- 地址字段不匹配:比如你传入的
Indirizzo(街道名称)和cittaStr(城市)、provinciaStr(省)不对应(比如街道属于A市,但城市字段填的是B市),EGON服务校验时发现逻辑冲突,返回400。 - 字段格式不符合要求:某个地址字段(比如
Indirizzo包含特殊字符、邮编长度不对、门牌号格式错误)不符合EGON服务的校验规则,导致请求被拒。 - 参数映射错误:在
ValidateAddressEgon_internal方法里,可能把Indirizzo的值传到了EGON服务的错误参数位(比如本该传街道的地方传了门牌号),导致请求结构错误。
4. 下一步排查建议
- 先查看
EgonModel.cs第65行的代码:看看它是如何构造请求发送给EGON服务的,有没有参数拼接、序列化的问题,或者有没有捕获EGON服务返回的更详细错误信息(可能被当前代码吞掉了)。 - 检查
Validations.cs第1171行附近的代码:确认传递给EgonModel.Validate的参数(ADDR对应Indirizzo、CIV对应门牌号、ZIP对应邮编等)是否和用户填写的表单值一致,有没有字段关联错误。 - 如果可以的话,捕获并查看发给EGON服务的原始请求内容,对比EGON服务的官方文档,逐一校验每个地址字段的格式和关联性要求。
内容的提问来源于stack exchange,提问作者Tms91
相关产品推荐
相关产品推荐

