带有 ASP.NET 核心 MVC 控制器的 Blazor 服务器,验证问题
Blazor server with ASP.NET Core MVC controller, validation issue
我正在开发一个使用 .NET 6 中的 Blazor Server 制作的项目。我添加了用于身份验证流程注册、注册和连接外部登录提供程序的控制器。
当我想将 GET
请求发送到我使用路由 /register
发出的端点时,页面按预期加载。另一方面,当发送 POST
且验证无效时,响应如下所示。
{
"type": "https://tools.ietf.org/html/rfc7231#section-6.5.1",
"title": "One or more validation errors occurred.",
"status": 400,
"traceId": "00-5f48e143e34dbb3a8d4223b7a912d679-48179933e0c1adc8-00",
"errors": {
"Email": [
"The Email field is required."
],
"Phone": [
"The Phone field is required."
],
"Lastname": [
"The Lastname field is required."
],
"Password": [
"The Password field is required."
],
"Firstname": [
"The Firstname field is required."
],
"CountryCode": [
"The CountryCode field is required."
]
}
}
无论我做什么,怎么做,验证都会返回json,即使填写的字段符合要求。 json 返回缺少的字段,这很好。
问题是我可以验证验证是否有效,因为随着字段获得正确的用户输入,缺失的字段正在缩小。
例如,预期的行为是在注册表单的字段上方显示错误。
解决方案已找到,经过一些研究后我发现我的 /register
端点被处理为 API 端点,但事实并非如此。
要解决此问题,必须将此代码放入 Program.cs
文件
builder.Services.Configure<ApiBehaviorOptions>(options =>
{
options.SuppressModelStateInvalidFilter = true;
});
请注意,这会禁用所有控制器的预请求模型验证,现在控制器和视图都是独立的。
我正在开发一个使用 .NET 6 中的 Blazor Server 制作的项目。我添加了用于身份验证流程注册、注册和连接外部登录提供程序的控制器。
当我想将 GET
请求发送到我使用路由 /register
发出的端点时,页面按预期加载。另一方面,当发送 POST
且验证无效时,响应如下所示。
{
"type": "https://tools.ietf.org/html/rfc7231#section-6.5.1",
"title": "One or more validation errors occurred.",
"status": 400,
"traceId": "00-5f48e143e34dbb3a8d4223b7a912d679-48179933e0c1adc8-00",
"errors": {
"Email": [
"The Email field is required."
],
"Phone": [
"The Phone field is required."
],
"Lastname": [
"The Lastname field is required."
],
"Password": [
"The Password field is required."
],
"Firstname": [
"The Firstname field is required."
],
"CountryCode": [
"The CountryCode field is required."
]
}
}
无论我做什么,怎么做,验证都会返回json,即使填写的字段符合要求。 json 返回缺少的字段,这很好。
问题是我可以验证验证是否有效,因为随着字段获得正确的用户输入,缺失的字段正在缩小。
例如,预期的行为是在注册表单的字段上方显示错误。
解决方案已找到,经过一些研究后我发现我的 /register
端点被处理为 API 端点,但事实并非如此。
要解决此问题,必须将此代码放入 Program.cs
文件
builder.Services.Configure<ApiBehaviorOptions>(options =>
{
options.SuppressModelStateInvalidFilter = true;
});
请注意,这会禁用所有控制器的预请求模型验证,现在控制器和视图都是独立的。