C# 在Asp.Net核心Web API的反序列化过程中,未验证用[DataMember]修饰的数据
我有一门DTO课,像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
[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; }
}