带有 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;
});

请注意,这会禁用所有控制器的预请求模型验证,现在控制器和视图都是独立的。