在ASP.NET Core中,使用Json.NET(現在稱為Newtonsoft.Json)進行數據驗證時,可以通過以下方法處理數據驗證:
public class UserData
{
[Required(ErrorMessage = "用戶名不能為空")]
[StringLength(50, ErrorMessage = "用戶名長度不能超過50個字符")]
public string Username { get; set; }
[Required(ErrorMessage = "密碼不能為空")]
[StringLength(100, ErrorMessage = "密碼長度不能超過100個字符")]
public string Password { get; set; }
[Required(ErrorMessage = "電子郵件不能為空")]
[EmailAddress(ErrorMessage = "電子郵件格式不正確")]
public string Email { get; set; }
}
ActionResult
。例如:using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
[ApiController]
[Route("api/[controller]")]
public class UsersController : ControllerBase
{
[HttpPost]
public async Task<IActionResult> Create([FromBody] UserData userData)
{
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
// 保存用戶數據并返回成功響應
// ...
return CreatedAtAction(nameof(Get), new { id = userData.Username }, userData);
}
}
IExceptionHandler
接口并在GlobalExceptionHandler
類中注冊它。例如:using System.Net;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Abstractions;
using Microsoft.AspNetCore.Mvc.ModelBinding;
using Microsoft.AspNetCore.Mvc.Razor;
using Microsoft.AspNetCore.Mvc.Rendering;
using Microsoft.AspNetCore.Mvc.ViewFeatures;
using Microsoft.AspNetCore.Routing;
public class CustomExceptionHandler : IExceptionHandler
{
public Task HandleAsync(ExceptionContext context)
{
if (context.ExceptionHandled || !context.HttpContext.Request.IsAjaxRequest())
{
return Task.CompletedTask;
}
context.Result = new HttpStatusCodeResult(HttpStatusCode.BadRequest);
context.ExceptionHandled = true;
return Task.CompletedTask;
}
}
public class GlobalExceptionHandler : IExceptionFilter
{
private readonly CustomExceptionHandler _exceptionHandler;
public GlobalExceptionHandler(CustomExceptionHandler exceptionHandler)
{
_exceptionHandler = exceptionHandler;
}
public void OnException(ExceptionContext context)
{
_exceptionHandler.HandleAsync(context).Wait();
}
}
然后,在Startup.cs
中注冊自定義錯誤處理程序:
public void ConfigureServices(IServiceCollection services)
{
// ...
services.AddControllersWithViews()
.AddRazorPages()
.AddViewOptions(options =>
{
options.HtmlHelperOptions.ErrorContext = new ErrorContext
{
ModelState = new ModelStateDictionary()
};
})
.AddGlobalExceptionFilter(new GlobalExceptionHandler(new CustomExceptionHandler()));
}
這樣,當數據驗證失敗時,系統將返回一個包含錯誤信息的JSON響應。