Skip to main content
 首页 » 编程设计

c#之将 ASP.NET Core WEB API ModelState 错误放入 Angular 6 中的数组

2024年01月29日23www_RR

我的应用程序中有一个寄存器模型,如下所示:

public class UserRegisterDTO 
{ 
    public int Id { get; set; } 
    [Required] 
    public string Username { get; set; } 
    [Required] 
    [StringLength(12, MinimumLength = 8, ErrorMessage = "You must specify password between 8 and 12 chars.")] 
    public string Password { get; set; } 
} 

然后我像这样通过 angular 6 向服务器发送注册请求:

  register() { 
    this.authService.register(this.model).subscribe(() => { 
      this.alertify.success('Registration successful'); 
    }, error => { 
      console.log(error); 
      this.alertify.error(error); 
    }); 
  } 

当我向服务器发布错误模型时,ModelValidation 工作正常并返回 ModelState 错误,但是 console.log(error) 显示如下对象:

{Password: Array(1), Username: Array(1)} 
Password: ["You must specify password between 8 and 12 chars."] 
Username: ["The Username field is required."] 
__proto__: 
constructor: ƒ Object() 
hasOwnProperty: ƒ hasOwnProperty() 
isPrototypeOf: ƒ isPrototypeOf() 
propertyIsEnumerable: ƒ propertyIsEnumerable() 
toLocaleString: ƒ toLocaleString() 
toString: ƒ () 
valueOf: ƒ valueOf() 
__defineGetter__: ƒ __defineGetter__() 
__defineSetter__: ƒ __defineSetter__() 
__lookupGetter__: ƒ __lookupGetter__() 
__lookupSetter__: ƒ __lookupSetter__() 
get __proto__: ƒ __proto__() 
set __proto__: ƒ __proto__() 

我想将错误消息放入一个字符串数组中。我尝试了 JOSN.stringify(error) 但它没有解决我的问题。

你能帮帮我吗?

请您参考如下方法:

您可以轻松编写一个函数,将模型错误对象转换为您想要的形式。如果我正确理解了您的要求,那么下面的函数应该可以解决问题。

transformError(err: { [key:string]: any }) { 
    const messages: string[] = []; 
 
    if (err) { 
        for (let key of err) { 
            for (let message of err[key]) { 
                messages.push(`${key}: ${message}`); 
            } 
        } 
    } 
 
    return messages; 
} 
 
register() { 
    this.authService.register(this.model).subscribe(() => { 
        this.alertify.success('Registration successful'); 
    }, error => { 
        const messages = this.transformError(error); 
        this.alertify.error(messages); 
    }); 
}