Controller端点接收的POST提交对象缺失Location字段问题咨询
问题原因排查及解决方案
1 优先排查构建失效问题
- 手动清理构建缓存:删除项目根目录下的
bin、obj文件夹,在终端执行dotnet clean命令清理残留文件,再执行dotnet build确认编译无错误警告后,重新启动项目。 - 校验VS Code构建配置:检查
.vscode/launch.json中的preLaunchTask配置是否指向正确的构建任务,再检查.vscode/tasks.json中对应构建任务的命令是否携带--no-build等跳过构建的参数,确保启动项目前会强制编译最新代码。 - 清理残留进程:打开任务管理器杀掉所有同名dotnet进程,避免旧版本服务后台驻留、端口被占用,导致实际访问的始终是未更新的旧服务。
2 若确认构建正常,排查序列化与模型绑定问题
- 补充Location类无参构造函数:当前
Location类仅定义了带lat、lng参数的有参构造,.NET默认的Json序列化器(包括System.Text.Json和Newtonsoft.Json)反序列化时需要无参构造函数才能实例化对象,在Location类中添加空的无参构造即可:
public Location(){}
- 强制匹配字段名大小写:如果全局序列化配置修改了默认的驼峰命名规则,可给
EstablishmentDto中的Location属性手动指定序列化别名,用System.Text.Json就加[JsonPropertyName("location")],用Newtonsoft.Json就加[JsonProperty("location")],确保和请求中的location字段名完全匹配。 - 校验请求头格式:确认POST请求的
Content-Type为application/json,如果使用form-data、x-www-form-urlencoded格式提交嵌套对象,会默认无法解析location这类层级结构的字段。 - 检查全局过滤规则:排查是否有全局序列化忽略配置、自定义模型绑定器将
Location类型或Location属性过滤掉,你代码中已存在PropertyName特性带Ignore = true的用法,需确认没有针对Location属性的同类忽略配置。
内容的提问来源于stack exchange,提问作者BeniaminoBaggins
相关产品推荐
相关产品推荐

