溫馨提示×

asp.netjson怎樣處理數據驗證

小樊
101
2024-12-08 02:33:07
欄目: 編程語言

在ASP.NET Core中,使用Json.NET(現在稱為Newtonsoft.Json)進行數據驗證時,可以通過以下方法處理數據驗證:

  1. 創建數據傳輸對象(DTO):首先,創建一個數據傳輸對象類,該類將包含您希望從客戶端接收的數據。在這個類中,您可以使用數據注解來定義驗證規則。例如:
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; }
}
  1. 在控制器中使用DTO:在您的控制器方法中,將接收的JSON數據綁定到DTO對象。如果數據驗證失敗,將返回一個包含錯誤信息的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);
    }
}
  1. 自定義錯誤處理:如果您需要自定義錯誤處理邏輯,可以實現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響應。

0
亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女