C# 在Asp.Net核心Web API的反序列化过程中,未验证用[DataMember]修饰的数据

C# 在Asp.Net核心Web API的反序列化过程中,未验证用[DataMember]修饰的数据,c#,validation,asp.net-core-webapi,C#,Validation,Asp.net Core Webapi,我有一门DTO课,像 [DataContract] public class MyDTO { [DataMember(IsRequired)] public string MyProperty { get; set; } } 当我在没有MyProperty的情况下发出POST请求时,我没有得到任何异常 编辑: 我的控制器看起来像: [HttpPost] public async Task<IActionResult> Add([FromForm] MyDTO new

我有一门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.");
    }
}
[HttpPost]
公共异步任务添加([FromForm]MyDTO-newDTO)
{
如果(!this.ModelState.IsValid)
{
var errors=this.GetModelStateErrors();
返回此.BadRequest();
}
尝试
{
var newDo=this.mapper.Map(newDto);
等待this.dataManager.InsertAsync(this.myDbContext,newDo);
返回此状态码(201);
}
捕获(ValidationException e)
{
返回此.BadRequest(e.Message);
}
捕获(例外e)
{
返回此.StatusCode(500,“处理请求时发生未指定错误”);
}
}

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

你能分享API的代码吗?你在API中写过验证吗?@ChetanRanpariya添加了我的控制器。你不应该使用
DataMember
DataContract
进行web API模型验证。您应该使用
System.ComponentModel.DataAnnotations
命名空间中可用的类。另外,
[FromForm]
不适用于WebAPI。阅读以了解Web API中的验证。
public class MyDTO
{
    [System.ComponentModel.DataAnnotations.Required]
    public string MyProperty { get; set; }
}