为什么ModelState不返回除字符串以外的数据类型的错误消息?

时间:2018-04-24 03:33:48

标签: c# asp.net-web-api asp.net-core-mvc

以下是与我的实体模型匹配的ViewModel(VM)的快照。在我的控制器中,我通过使用ModelState添加ModelState.AddModelError错误消息来处理验证,然后使用静态方法FormatErrorResponse返回所有错误消息。

我的问题如果属性不是string,则错误消息始终为空!在下面的VM AreaCodeint,如果我将其更改为string,我会收到错误消息,但不是相反,

我在这里缺少什么?

这是我的VM,

public class SaveViewModel {
     public int AreaCode { get; set; }
     public string PhoneNumber { get; set; }
     public string GenderId { get; set; }
}

和我的FormatErrorResponse

public static object FormatErrorResponse (ModelStateDictionary modelState) {
            var errors = new List<string> ();
            foreach (var state in modelState) {
                foreach (var error in state.Value.Errors) {
                    errors.Add (error.ErrorMessage);
                }
            }

            var response = new { errorMessages = errors };
            return response;
        }

在我的API控制器中,

bool isValidPhoneNumber = this.applicationUserRepository.isValidPhoneNumber (patientUser);
     if (!isValidPhoneNumber) {
       ModelState.AddModelError (string.Empty, "Invalid phone number!");
       return StatusCode (400, StaticHandlers.FormatErrorResponse (ModelState));
      }

1 个答案:

答案 0 :(得分:0)

我的问题是ModelState本身,我在方法的开头有以下代码,

        if (!ModelState.IsValid) {
            return StatusCode (400, StaticHandlers.FormatErrorResponse (ModelState));
        }; 

我的JSON datatype与我的VM代表之间存在冲突。 我在string中提供JSON,我的虚拟机期待int

这个post也解释了这个问题。