zoukankan      html  css  js  c++  java
  • ASP.NET Web API模型验证以及异常处理方式

    ASP.NET Web API的模型验证与ASP.NET MVC一样,都使用System.ComponentModel.DataAnnotations。

    具体来说,比如有:
    [Required(ErrorMessage="")]
    [Range(0, 999)]
    [Bind(Exclude="")]
    [DisplayName("")]
    [StringLength(1024)]
    ...

    验证扩展可以看这里:http://dataannotationsextensions.org/

    在controller中如何验证模型呢?

    通常是通过ModelState.IsValid.

    public HttpResponseMessage Post(Product product)
    {
        if(ModelState.IsValid){
            //
            return new HttpResponseMessage(HttpStatusCode.OK);
        }
        else
        {
            return Request.CreateErrorResponse(HttpStatusCode.BadRequest, ModelState);
        }
    }

    还可以通过"面向切面"的方式,自定义一个模型验证的特性ActionFilterAttibute特性。

    public class ValidateModelAttribute:ActionFilterAttibute
    {
        public override void OnActionExecuting(HttpActionContext actionContext)
        {
            if(actionContext.ModelState.IsValid == false)
            {
                actionContext.Response = actionContext.Request.CreateErrorResponse(HttpStatusCode.BadRequest, actionContext.ModelState);
            }
        }
    }

    然后需要把自定义的过滤器特性注册到默认的过滤器集合中去。

    public static class WebApiConfig
    {
        public static void Register(HttpConfiguraiotn config)
        {
            config.Filters.Add(new ValidateModelAttribute());
        }
    }

    如果不在全局注册过滤器,我们还可以把过滤器特性打到控制器或控制器方法上去。

    [ValidateModel]
    public HttpResponseMessage Post(Product product)
    {
    
    }
  • 相关阅读:
    求100之内能被3整除不能被5整除的所有整数,和个数
    三目运算符的优先级问题
    javac不是内部或外部命令
    GitHub : Hello World
    Java GUI :Hello World
    onClick="RETURN:login();"
    问题-CHM文件不显示
    jsp里导入java包的问题
    实现算法2.2的程序
    实现算法2.4的程序
  • 原文地址:https://www.cnblogs.com/darrenji/p/5223771.html
Copyright © 2011-2022 走看看