首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在ASP.NET Web API中处理ModelState验证

在ASP.NET Web API中处理ModelState验证
EN

Stack Overflow用户
提问于 2012-07-27 19:16:43
回答 7查看 125.9K关注 0票数 110

我想知道如何使用ASP.NET Web API实现模型验证。我的模型是这样的:

代码语言:javascript
复制
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操作:

代码语言:javascript
复制
public void Post(Enquiry enquiry)
{
    enquiry.EnquiryDate = DateTime.Now;
    context.DaybookEnquiries.Add(enquiry);
    context.SaveChanges();
}

如何添加if(ModelState.IsValid),然后处理向下传递给用户的错误消息?

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2012-07-30 23:18:37

为了分离关注点,我建议你使用action filter进行模型验证,所以你不需要太关心如何在你的api控制器中进行验证:

代码语言:javascript
复制
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);
        }
    }
}
票数 190
EN

Stack Overflow用户

发布于 2014-05-16 22:56:27

也许不是你想要的,但让人知道也许很好:

如果您使用的是.net Web 2,您只需执行以下操作:

代码语言:javascript
复制
if (!ModelState.IsValid)
     return BadRequest();

根据模型错误,您会得到以下结果:

代码语言:javascript
复制
{
   Message: "The request is invalid."
   ModelState: {
       model.PropertyA: [
            "The PropertyA field is required."
       ],
       model.PropertyB: [
             "The PropertyB field is required."
       ]
   }
}
票数 32
EN

Stack Overflow用户

发布于 2019-11-05 13:56:51

在startup.cs文件中添加以下代码

代码语言:javascript
复制
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2).ConfigureApiBehaviorOptions(options =>
            {
                options.InvalidModelStateResponseFactory = (context) =>
                {
                    var errors = context.ModelState.Values.SelectMany(x => x.Errors.Select(p => new ErrorModel()
                   {
                       ErrorCode = ((int)HttpStatusCode.BadRequest).ToString(CultureInfo.CurrentCulture),
                        ErrorMessage = p.ErrorMessage,
                        ServerErrorMessage = string.Empty
                    })).ToList();
                    var result = new BaseResponse
                    {
                        Error = errors,
                        ResponseCode = (int)HttpStatusCode.BadRequest,
                        ResponseMessage = ResponseMessageConstants.VALIDATIONFAIL,

                    };
                    return new BadRequestObjectResult(result);
                };
           });
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11686690

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档