热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Asp。NetcoreWebApi模型状态不工作-Asp.NetcoreWebApimodelstatenotworking

Ihavethiswebapiandtryingtousethemodelstate.IsValidfunction,butihaveranintosomestr

I have this webapi and trying to use the "modelstate.IsValid" function, but i have ran into some strange problem. I have the following method in my controller:

我有这个webapi并尝试使用“modelstate”。是有效的函数,但是我遇到了一些奇怪的问题。我的控制器有以下方法:

[HttpPut]
    [Route("{id}")]
    public async Task Put([FromBody]ItemUpdateModel model, [FromRoute]int id)
    {
        if (!ModelState.IsValid) //Here i have a breakpoint!
        {
            return BadRequest(new
            {
                code = 400,
                message = ModelState.Values.First().Errors.First().ErrorMessage
            });
        }
}

And here is the model, ItemUpdateModel

这是模型ItemUpdateModel

using System.ComponentModel.DataAnnotations;

namespace TestApi.Models
{
    public class ItemUpdateModel
    {
        [Required]
        [Display(Name = "title")]
        [MaxLength(40)]
        public string Title { get; set; }

        [Required]
        [Display(Name = "discount")]
        public double Discount { get; set; }

        [Required]
        [Display(Name = "priceupdate")]
        public bool PriceUpdate { get; set; }
    }
}

I use Postman to send this http-request in the body with verb PUT and format json:

我使用Postman将这个http请求以谓词PUT和格式json发送到主体:

{ "title": "Some test", "discount": 0, "priceupdate": false }

{"title": "Some test", "discount": 0, "priceupdate": false}

This request should pass ok, but even if i try to leave out some properties the modelstate is always true. So when looking into the modelstate, this model aint binding at all to it. Only the [FromRoute]int id is bind, and the modelstate gets valid.

这个请求应该传递ok,但即使我尝试省略一些属性,modelstate始终为true。因此,当研究模型状态时,这个模型对它没有约束力。只有[FromRoute]int id被绑定,模型状态才有效。

The model is anyway getting filled with data and working except from the modelstate validation/binding.

无论如何,除了模型状态验证/绑定之外,模型都在填充数据并工作。

Also in the header im including: "application/json; charset=utf-8"

在标题中还包括:“应用/json;charset = utf - 8”

Anyone can help me with this, i have struggled a lot with this that seems like a really simple task :)

任何人都可以帮助我做这件事,我一直在努力做这件事,这似乎是一项非常简单的任务:

Thanks!

谢谢!

1 个解决方案

#1


1  

Solved this, finally.

终于解决了这个问题,。

For some reason the modelstate aint dealing with the model if its "valid". And the model is getting valid by the JSON formatter adding the missing values for the datatypes double and int by adding value 0 or false for booleans. The solution was to make the properties nullable in the model, like

由于某些原因,模型状态不处理模型,如果它的“有效”。通过为数据类型double和int添加值为0或为布尔值为false, JSON格式化程序使模型变得有效。解决方案是在模型中使属性为空。

public double? Price { get; set; }

公共双?价格{得到;设置;}

Now when i post the request, the price is NULL and presented in the modelstate as invalid.

现在,当我发布请求时,价格为NULL,在modelstate中显示为无效。


推荐阅读
  • 在JavaWeb开发中,文件上传是一个常见的需求。无论是通过表单还是其他方式上传文件,都必须使用POST请求。前端部分通常采用HTML表单来实现文件选择和提交功能。后端则利用Apache Commons FileUpload库来处理上传的文件,该库提供了强大的文件解析和存储能力,能够高效地处理各种文件类型。此外,为了提高系统的安全性和稳定性,还需要对上传文件的大小、格式等进行严格的校验和限制。 ... [详细]
  • 在PHP中如何正确调用JavaScript变量及定义PHP变量的方法详解 ... [详细]
  • 技术分享:使用 Flask、AngularJS 和 Jinja2 构建高效前后端交互系统
    技术分享:使用 Flask、AngularJS 和 Jinja2 构建高效前后端交互系统 ... [详细]
  • 本文介绍了如何利用Struts1框架构建一个简易的四则运算计算器。通过采用DispatchAction来处理不同类型的计算请求,并使用动态Form来优化开发流程,确保代码的简洁性和可维护性。同时,系统提供了用户友好的错误提示,以增强用户体验。 ... [详细]
  • Web开发框架概览:Java与JavaScript技术及框架综述
    Web开发涉及服务器端和客户端的协同工作。在服务器端,Java是一种优秀的编程语言,适用于构建各种功能模块,如通过Servlet实现特定服务。客户端则主要依赖HTML进行内容展示,同时借助JavaScript增强交互性和动态效果。此外,现代Web开发还广泛使用各种框架和库,如Spring Boot、React和Vue.js,以提高开发效率和应用性能。 ... [详细]
  • 深入探索HTTP协议的学习与实践
    在初次访问某个网站时,由于本地没有缓存,服务器会返回一个200状态码的响应,并在响应头中设置Etag和Last-Modified等缓存控制字段。这些字段用于后续请求时验证资源是否已更新,从而提高页面加载速度和减少带宽消耗。本文将深入探讨HTTP缓存机制及其在实际应用中的优化策略,帮助读者更好地理解和运用HTTP协议。 ... [详细]
  • 本文深入探讨了在Spring Boot中处理RESTful风格的表单请求的方法,包括请求参数处理、请求映射以及RESTful设计原则的应用。文章详细介绍了如何利用HTTP动词(如GET、POST、PUT、DELETE)来操作资源,并结合Spring Boot的注解(如@GetMapping、@PostMapping等)实现高效、清晰的请求处理逻辑。通过实例分析,展示了如何在实际项目中应用这些技术,提高开发效率和代码可维护性。 ... [详细]
  • javascript分页类支持页码格式
    前端时间因为项目需要,要对一个产品下所有的附属图片进行分页显示,没考虑ajax一张张请求,所以干脆一次性全部把图片out,然 ... [详细]
  • 本文总结了一些开发中常见的问题及其解决方案,包括特性过滤器的使用、NuGet程序集版本冲突、线程存储、溢出检查、ThreadPool的最大线程数设置、Redis使用中的问题以及Task.Result和Task.GetAwaiter().GetResult()的区别。 ... [详细]
  • MySQL Decimal 类型的最大值解析及其在数据处理中的应用艺术
    在关系型数据库中,表的设计与SQL语句的编写对性能的影响至关重要,甚至可占到90%以上。本文将重点探讨MySQL中Decimal类型的最大值及其在数据处理中的应用技巧,通过实例分析和优化建议,帮助读者深入理解并掌握这一重要知识点。 ... [详细]
  • 本文介绍了如何使用 Node.js 和 Express(4.x 及以上版本)构建高效的文件上传功能。通过引入 `multer` 中间件,可以轻松实现文件上传。首先,需要通过 `npm install multer` 安装该中间件。接着,在 Express 应用中配置 `multer`,以处理多部分表单数据。本文详细讲解了 `multer` 的基本用法和高级配置,帮助开发者快速搭建稳定可靠的文件上传服务。 ... [详细]
  • DVWA学习笔记系列:深入理解CSRF攻击机制
    DVWA学习笔记系列:深入理解CSRF攻击机制 ... [详细]
  • 【实例简介】本文详细介绍了如何在PHP中实现微信支付的退款功能,并提供了订单创建类的完整代码及调用示例。在配置过程中,需确保正确设置相关参数,特别是证书路径应根据项目实际情况进行调整。为了保证系统的安全性,存放证书的目录需要设置为可读权限。值得注意的是,普通支付操作无需证书,但在执行退款操作时必须提供证书。此外,本文还对常见的错误处理和调试技巧进行了说明,帮助开发者快速定位和解决问题。 ... [详细]
  • 如何使用 `org.apache.tomcat.websocket.server.WsServerContainer.findMapping()` 方法及其代码示例解析 ... [详细]
  • 在分析和解决 Keepalived VIP 漂移故障的过程中,我们发现主备节点配置如下:主节点 IP 为 172.16.30.31,备份节点 IP 为 172.16.30.32,虚拟 IP 为 172.16.30.10。故障表现为监控系统显示 Keepalived 主节点状态异常,导致 VIP 漂移到备份节点。通过详细检查配置文件和日志,我们发现主节点上的 Keepalived 进程未能正常运行,最终通过优化配置和重启服务解决了该问题。此外,我们还增加了健康检查机制,以提高系统的稳定性和可靠性。 ... [详细]
author-avatar
墨镜猛女班长
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有