在API控制器中使用数据传输对象-模型状态验证不起作用

时间:2019-07-15 15:45:59

标签: asp.net-web-api2 modelstate

我有一个API控制器,其中的ModelState验证似乎不起作用。

我的代码基于Visual Studio使用控制器模板“使用实体框架进行操作的Web API 2控制器”提供的脚手架代码。但是,我不是通过API公开数据模型类,而是使用数据传输对象,而是在其中设置属性属性以匹配与EF使用的数据模型类相关联的属性。

这是我的DTO课程:

public class Fee()
{
    [Required]
    [StringLength(500)]
    public string Description { get; set; }

    [Required]
    [StringLength(50)]
    public string Name { get; set; }

    public int ID { get; set; }
}

在我的控制器中,我有以下代码:

[HttpPost]
[ResponseType(typeof(Fee))]
public async Task<IHttpActionResult> PostFeeAsync(Fee fee)
{
    if (!ModelState.IsValid)
        return BadRequest(ModelState);

    // Rest of code is here
}

如果我使用默认构造函数创建新的Fee,则Description和Name字段为null。因为它们被标记为[Required],所以我希望ModelState.IsValid为false,但是当我运行代码时,情况并非如此。

查看其他文章,我看到一些调用ModelState.Clear()和Validate(fee)的建议,但是当我使用它们时,出现一个异常,提示“ ApiController.Configuration不能为空”。调用Validate方法时。

我在这里做什么错了?

0 个答案:

没有答案