zoukankan      html  css  js  c++  java
  • asp.net mvc重写RequestValidator

      /// <summary>
        /// <httpRuntime requestValidationType="xxx.CustomRequestValidator" />
        /// </summary>
        public class CustomRequestValidator : RequestValidator
        {
            public readonly static object CustomRequestValidatorKey = new object();
    
            protected override bool IsValidRequestString(HttpContext context, string value, RequestValidationSource requestValidationSource,
                string collectionKey, out int validationFailureIndex)
            {
                var obj = context.Items[CustomRequestValidatorKey];
                if (obj != null)
                {
                    var notValid = (RequestNotValidationSource)obj;
                    if (notValid == RequestNotValidationSource.All)
                    {
                        validationFailureIndex = 0;
                        return true;
                    }
                    RequestNotValidationSource tmp;
                    if (Enum.TryParse(requestValidationSource.ToString(), out tmp) && notValid.HasFlag(tmp))
                    {
                        validationFailureIndex = 0;
                        return true;
                    }
                }
                return base.IsValidRequestString(context, value, requestValidationSource, collectionKey, out validationFailureIndex);
            }
        }
    
        /// <summary>
        /// 重写验证逻辑
        /// </summary>
        [AttributeUsage(AttributeTargets.Method | AttributeTargets.Class, Inherited = true, AllowMultiple = false)]
        public class CustomRequestValidatorAttribute : FilterAttribute, IAuthorizationFilter
        {
            /// <summary>
            /// 不验证哪些数据
            /// </summary>
            public RequestNotValidationSource? NotValidationSource { get; set; }
    
            public CustomRequestValidatorAttribute()
            {
                NotValidationSource = null;
            }
    
            /// <summary>
            /// 
            /// </summary>
            /// <param name="notValidationSource">不验证哪些数据</param>
            public CustomRequestValidatorAttribute(RequestNotValidationSource notValidationSource)
            {
                NotValidationSource = notValidationSource;
            }
    
            public virtual void OnAuthorization(AuthorizationContext filterContext)
            {
                filterContext.HttpContext.Items[CustomRequestValidator.CustomRequestValidatorKey] = NotValidationSource;
            }
    
        }
    
        /// <summary>
        /// 不验证哪些数据
        /// </summary>
        [Flags]
        public enum RequestNotValidationSource
        {
            QueryString = 1,
            Form = 2,
            Cookies = 4,
            Files = 8,
            RawUrl = 16,
            Path = 32,
            PathInfo = 64,
            Headers = 128,
            All = 256
        }
  • 相关阅读:
    实战篇之实现 OutLook 中以 EDM 形式发送通知邮件
    ASP.NET MVC5 之路由器
    ASP.NET MVC5 之数据迁移
    说不出的烦
    ASP.NET MVC5 之 Log4Net 的学习和使用
    读取配置文件参数和文件路径
    序列化和反序列化示例
    面向对象之封装
    面向对象4之常用的乱七八糟
    面向对象三之继承和派生
  • 原文地址:https://www.cnblogs.com/lizhanglong/p/5145924.html
Copyright © 2011-2022 走看看