我正在学习 Blazor,并且我有一个 WebAssembly 客户端应用程序。
我在服务器上创建了一个 WebAPI,它在标准数据注释验证之外做了一些额外的验证。例如,当它尝试将记录写入数据库时,它会检查是否不存在具有相同电子邮件地址的其他记录。某些类型的验证不能在客户端可靠地发生,特别是在竞争条件可能产生不良结果的情况下。
API 控制器向客户端返回一个ValidationProblem结果,Postman 将结果的正文显示为:
{
"type": "https://tools.ietf.org/html/rfc7231#section-6.5.1",
"title": "One or more validation errors occurred.",
"status": 400,
"traceId": "|f06d4ffe-4aa836b5b3f4c9ae.",
"errors": {
"Email": [
"The email address already exists."
]
}
}
Run Code Online (Sandbox Code Playgroud)
请注意,验证错误位于 JSON 中的“errors”数组中。
回到 Blazor 客户端应用程序,我有一个典型的 HandleValidSubmit 函数,它将数据发布到 API 并接收响应,如下所示:
private async void HandleValidSubmit()
{
var response = await Http.PostAsJsonAsync<TestModel>("api/Test", testModel);
if (response.StatusCode != System.Net.HttpStatusCode.Created)
{
// How to handle server-side validation errors?
}
}
Run Code Online (Sandbox Code Playgroud)
我的问题是,如何最好地处理服务器端验证错误?用户体验应该与任何其他验证错误相同,突出显示该字段,显示验证消息,以及页面顶部的摘要。