ASP.NET Core 提供了一种灵活的方式来实现客户端和服务器端验证复用代码的解决方案。以下是一个示例解决方案:
创建一个名为 SharedValidation.csproj
的类库项目,用于存放共享验证代码。
在 SharedValidation.csproj
中添加以下代码,以引用所需的 NuGet 包:
netcoreapp3.1
SharedValidation.csproj
中创建一个名为 SharedValidator.cs
的类,用于存放共享验证逻辑的代码:using FluentValidation;
namespace SharedValidation
{
public class SharedValidator : AbstractValidator
{
public SharedValidator()
{
RuleFor(x => x.SomeProperty)
.NotEmpty()
.WithMessage("Some property is required.")
.Length(5, 10)
.WithMessage("Some property must be between 5 and 10 characters long.");
}
}
public class SomeModel
{
public string SomeProperty { get; set; }
}
}
在 SharedValidation.csproj
中执行 dotnet build
命令,以确保项目构建成功。
创建一个名为 ServerApp.csproj
的 ASP.NET Core 服务器端项目。
在 ServerApp.csproj
中添加以下代码,以引用 SharedValidation
项目:
netcoreapp3.1
ServerApp.csproj
中创建一个名为 HomeController.cs
的控制器,并使用 SharedValidator
进行服务器端验证:using Microsoft.AspNetCore.Mvc;
using SharedValidation;
namespace ServerApp.Controllers
{
[ApiController]
[Route("[controller]")]
public class HomeController : ControllerBase
{
[HttpPost]
public IActionResult SomeAction(SomeModel model)
{
var validator = new SharedValidator();
var result = validator.Validate(model);
if (!result.IsValid)
{
return BadRequest(result.Errors);
}
// 执行其他操作
return Ok();
}
}
}
创建一个名为 ClientApp.csproj
的 ASP.NET Core 客户端项目。
在 ClientApp.csproj
中添加以下代码,以引用 SharedValidation
项目:
netcoreapp3.1
ClientApp.csproj
中创建一个名为 SomePage.cshtml.cs
的页面模型,并使用 SharedValidator
进行客户端验证:using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
using SharedValidation;
namespace ClientApp.Pages
{
public class SomePageModel : PageModel
{
[BindProperty]
public SomeModel SomeModel { get; set; }
public IActionResult OnPost()
{
var validator = new SharedValidator();
var result = validator.Validate(SomeModel);
if (!result.IsValid)
{
foreach (var error in result.Errors)
{
ModelState.AddModelError(string.Empty, error.ErrorMessage);
}
return Page();
}
// 执行其他操作
return RedirectToPage("Success");
}
}
}
通过以上步骤,你可以在 ASP.NET Core 项目中实现客户端和服务器端验证的代码复用。共享的验证代码放置在一个单独的项目中,并在客户端和服务器端项目中引用该项目。这样,你可以在客户端和服务器端使用同一组验证规则,从而避免重复编写验证代码。