簡體   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