c# - Asp.Net 核心 WebApi 模型状态不工作

标签 c# asp.net json asp.net-web-api modelstate

我有这个 webapi 并尝试使用“modelstate.IsValid”函数,但我遇到了一些奇怪的问题。 我的 Controller 中有以下方法:

[HttpPut]
    [Route("{id}")]
    public async Task<IActionResult> 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
            });
        }
}

这是模型,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; }
    }
}

我使用 Postman 在正文中使用动词 PUT 和格式 json 发送此 http 请求:

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

此请求应该可以正常通过,但即使我尝试遗漏一些属性,模型状态也始终为真。 所以当查看模型状态时,这个模型根本没有绑定(bind)到它。只有 [FromRoute]int id 被绑定(bind),modelstate 才有效。

除了模型状态验证/绑定(bind)之外,模型无论如何都会填充数据并正常工作。

同样在标题 im 中包括:“application/json; charset=utf-8”

任何人都可以帮我解决这个问题,我为此付出了很多努力,这似乎是一项非常简单的任务:)

谢谢!

最佳答案

终于解决了这个问题。

出于某种原因,模型状态不会处理“有效”的模型。模型通过 JSON 格式化程序通过为 bool 值添加值 0 或 false 为数据类型 double 和 int 添加缺失值而变得有效。解决方案是使模型中的属性可为空,例如

public double? Price { get; set; }

现在,当我发布请求时,价格为 NULL 并且在模型状态中显示为无效。

关于c# - Asp.Net 核心 WebApi 模型状态不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43694106/

相关文章:

c# - 将对象的 Json 列表发布到 C# 中的 web 方法?

asp.net-mvc - return Json 将在指定 Url 时重定向到另一个 View

c# - 如果不满足某些条件,如何停止加载 .NET 应用程序

c# - 资源争用

c# - 你能在 C# 中定义一个预先指定大小的数组吗?

c# - Dnn,客户端资源管理 - 模块路径

C# html-helper 扩展现有方法而不覆盖?

javascript - Html5 音频标签在 iOS7 设备上不起作用

c# - fatal error 导致超时 -mysql

java - 如何解析来自改造请求的以下错误响应?