C# 将ASP.NET核心WEB API ModelState错误放入6中的数组
我的应用程序中有一个寄存器模型,如下所示:C# 将ASP.NET核心WEB API ModelState错误放入6中的数组,c#,angular,asp.net-core,asp.net-core-webapi,C#,Angular,Asp.net Core,Asp.net Core Webapi,我的应用程序中有一个寄存器模型,如下所示: 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 a
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向服务器发送一个注册请求,如下所示:
登记册{
this.authService.registerthis.model.subscribe=>{
this.alertify.success“注册成功”;
},错误=>{
console.logerror;
this.alertify.errorerror;
};
}
当我将错误的模型发布到服务器时,ModelValidation工作正常并返回ModelState错误,但console.logerror显示如下对象:
{密码:Array1,用户名:Array1}
密码:[您必须指定8到12个字符之间的密码。]
用户名:[用户名字段是必需的。]
__原型:
构造函数:ƒ对象
hasOwnProperty:ƒhasOwnProperty
isPrototypeOf:ƒisPrototypeOf
propertyIsEnumerable:ƒpropertyIsEnumerable
toLocaleString:ƒtoLocaleString
托斯特林:ƒ
valueOf:ƒvalueOf
__定义者:定义者__
__定义设置:定义设置__
__查找器:查找器__
__查找记录器:查找记录器__
获取原始文件:原始文件__
集合uuu-proto uuuu:u402 uuuu-proto__
我想把错误消息放到字符串数组中。我尝试了JOSN.stringifyerror,但它不能解决我的问题
您能帮助我吗?您可以轻松编写一个函数,将模型错误对象转换为所需的形式。如果我正确地理解了您的需求,那么下面的函数应该可以做到这一点
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);
});
}
您可以轻松编写一个函数,将模型错误对象转换为所需的形式。如果我正确地理解了您的需求,那么下面的函数应该可以做到这一点
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);
});
}
Asp.NETCore提供了一种自定义无效模型状态响应的方法 在Startup类的ConfigureServicesServiceCollection方法中,添加以下内容:
services.Configure<ApiBehaviorOptions>(options =>
{
options.InvalidModelStateResponseFactory = context =>
{
object responseObject = context.ModelState.Select(entry => entry.Value.Errors.Select(error => error.ErrorMessage)).Aggregate(Enumerable.Empty<string>(), (agg, val) => agg.Concat(val));
return new BadRequestObjectResult(responseObject);
};
});
这将把ModelState字典转换为所需的错误数组。
请不要告诉我,除了我的聚合函数之外,你可以用任何你想要的方式来塑造响应
然后,您的操作将返回400个错误的请求响应,响应正文中包含错误数组。Asp.Net Core提供了一种自定义无效模型状态响应的方法 在Startup类的ConfigureServicesServiceCollection方法中,添加以下内容:
services.Configure<ApiBehaviorOptions>(options =>
{
options.InvalidModelStateResponseFactory = context =>
{
object responseObject = context.ModelState.Select(entry => entry.Value.Errors.Select(error => error.ErrorMessage)).Aggregate(Enumerable.Empty<string>(), (agg, val) => agg.Concat(val));
return new BadRequestObjectResult(responseObject);
};
});
这将把ModelState字典转换为所需的错误数组。
请不要告诉我,除了我的聚合函数之外,你可以用任何你想要的方式来塑造响应
然后,您的操作将返回400个错误请求响应,并在响应正文中显示错误数组。感谢您的帮助。你和Daniel Gimenez给了我一个正确的答案。谢谢你的帮助。你和Daniel Gimenez给了我一个正确的答案。