首页 > 后端开发 > C++ > 如何在 ASP.NET Web API 中有效处理模型验证?

如何在 ASP.NET Web API 中有效处理模型验证?

Mary-Kate Olsen
发布: 2024-12-24 15:18:10
原创
582 人浏览过

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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板