首頁 >後端開發 >C++ >如何在 ASP.NET Web API 中有效處理模型驗證?

如何在 ASP.NET Web API 中有效處理模型驗證?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-12-24 15:18:10593瀏覽

How Can I Effectively Handle Model Validation in ASP.NET Web API?

在ASP.NET Web API 中處理模型驗證

在ASP.NET Web API 應用程式中處理資料時,模型驗證起著重要角色在確保資料完整性方面發揮著至關重要的作用。 ModelState 屬性提供了一種根據模型規則驗證請求資料的便利機制。

考慮以下場景:

您有一個模型:

public class Enquiry
{
    [Key]
    public int EnquiryId { get; set; }
    [Required]
    public DateTime EnquiryDate { get; set; }
    [Required]
    public string CustomerAccountNumber { get; set; }
    [Required]
    public string ContactName { get; set; }
}

在您的API 中控制器,您有一個Post 操作:

public void Post(Enquiry enquiry)
{
    enquiry.EnquiryDate = DateTime.Now;
    context.DaybookEnquiries.Add(enquiry);
    context.SaveChanges();
}

要實作模型驗證,您可以使用ModelState.IsValid property:

public void Post(Enquiry enquiry)
{
    if (ModelState.IsValid)
    {
        enquiry.EnquiryDate = DateTime.Now;
        context.DaybookEnquiries.Add(enquiry);
        context.SaveChanges();
    }
}

如果模型有效,則操作將繼續在資料庫中建立實體。否則,它會傳回 400(錯誤請求)回應以及驗證錯誤訊息。

為了更清晰地分離關注點,您還可以使用操作過濾器進行模型驗證:

using System.Net;
using System.Net.Http;
using System.Web.Http.Controllers;
using System.Web.Http.Filters;

namespace System.Web.Http.Filters
{
    public class ValidationActionFilter : ActionFilterAttribute
    {
        public override void OnActionExecuting(HttpActionContext actionContext)
        {
            var modelState = actionContext.ModelState;

            if (!modelState.IsValid)
                actionContext.Response = actionContext.Request
                     .CreateErrorResponse(HttpStatusCode.BadRequest, modelState);
        }
    }
}

應用將此過濾器添加到您的Post 操作中:

[ValidationActionFilter]
public void Post(Enquiry enquiry)
{
    enquiry.EnquiryDate = DateTime.Now;
    context.DaybookEnquiries.Add(enquiry);
    context.SaveChanges();
}

透過使用這些方法之一實施模型驗證,您可以確保您的API 端點僅接受有效數據,並且向使用者提供有意義的錯誤訊息。

以上是如何在 ASP.NET Web API 中有效處理模型驗證?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn