繁体   English   中英

在 Asp.Net Core Web API 中反序列化期间未验证用 [DataMember] 修饰的数据

[英]Data decorated with [DataMember] is not being validated during deserialization in Asp.Net Core Web API

我有一个 DTO 类

[DataContract]
public class MyDTO
{
    [DataMember(IsRequired)]
    public string MyProperty { get; set; }
}

当我在没有MyProperty情况下发出POST请求时,我没有得到任何异常。

编辑:

我的控制器看起来像:

[HttpPost]
public async Task<IActionResult> Add([FromForm] MyDTO newDTO)
{
    if (!this.ModelState.IsValid)
    {
        var errors = this.GetModelStateErrors();
        return this.BadRequest();
    }

    try
    {
        var newDo = this.mapper.Map<MYDTO, MyDO>(newDto);
        await this.dataManager.InsertAsync(this.myDbContext, newDo);

        return this.StatusCode(201);
    }
    catch (ValidationException e)
    {
        return this.BadRequest(e.Message);
    }
    catch (Exception e)
    {
        return this.StatusCode(500, "Unspecified error occurred while processing request.");
    }
}

我也在 Db 上下文中对 DO 进行验证。 我想验证 DTO。

public class MyDTO
{
    [System.ComponentModel.DataAnnotations.Required]
    public string MyProperty { get; set; }
}

由于我遇到了同样的“问题”,让我解释一下我的理解:

DataContractDataMember位于System.Runtime.Serialization命名空间内。
这意味着它们与序列化行为有关。它们不打算用于模型验证。
IsRequired信息向序列化程序指示该字段是否必须出现在序列化消息中。

如果您需要验证是否必须验证存储在字段中的数据,则必须使用System.ComponentModel 中的属性 数据注释
此命名空间中的属性用于数据验证

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM