VS - ActionFilterAttribute

Global.asax.cs

   public class MvcApplication : System.Web.HttpApplication
    {
        public static void RegisterGlobalFilters(GlobalFilterCollection filters)
        {
            //filters.Add(new HandleErrorAttribute());
            
        }


        protected void Application_Start()
        {
            AreaRegistration.RegisterAllAreas();

            WebApiConfig.Register(GlobalConfiguration.Configuration);
            FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
            RouteConfig.RegisterRoutes(RouteTable.Routes);
            BundleConfig.RegisterBundles(BundleTable.Bundles);
            AuthConfig.RegisterAuth();
            //AntiForgeryConfig.SuppressIdentityHeuristicChecks = true; 
            EPSEmailInfoBLL.RefreshEmailSettings();


            UnityHelper.UnityContainer.LoadConfiguration();
            WebHelper.WebHelperImpl = UnityHelper.Resolve<IWebHelper>(); 
        }
}

 FilterConfig.cs

    public class FilterConfig
    {
        public static void RegisterGlobalFilters(GlobalFilterCollection filters)
        {
            filters.Add(new HandleErrorAttribute());
            filters.Add(new LogAction() { });
        }
    }

 LogAction.cs

    [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = false, Inherited = true)]
    public sealed class LogAction : ActionFilterAttribute
    {

        private string actionName = string.Empty;
        private Stopwatch sw = null;
        public override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            sw = Stopwatch.StartNew();
            actionName = filterContext.ActionDescriptor.ActionName;
            string function = actionName + " Start...";
            if (filterContext.ActionParameters.Count == 0)
            {
                LogFormatHelper.LogRequestParams(function);
            }
            else
            {
                object[] objs = new object[filterContext.ActionParameters.Count];
                int i = 0;
                foreach( var dic in filterContext.ActionParameters){
                    objs[i++] = dic.Value;
                }
                LogFormatHelper.LogRequestParams(function, objs);
            }
            base.OnActionExecuting(filterContext);
        }


        public override void OnResultExecuted(ResultExecutedContext filterContext)
        {
            base.OnResultExecuted(filterContext);
            string function = actionName + " End";
            StringBuilder sb = new StringBuilder();
            foreach (var key in filterContext.RouteData.Values.Keys)
            {
                sb.AppendFormat("{0} = {1}", key, filterContext.RouteData.Values[key]).AppendLine();
            }
            string str = filterContext.RouteData.Values.ToString();
            LogFormatHelper.LogRequestParams(function, sw.Elapsed , sb.ToString() );

            if (filterContext.Exception != null)
            {
                LogFormatHelper.LogServiceError(filterContext.Exception, actionName);
            }
            
        }

    }

 CheckLoginAttribute.cs

    [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = false, Inherited = true)]
    public sealed class CheckLogin : ActionFilterAttribute
    {
        public override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            if (filterContext.HttpContext.Session != null)
            {
                if (filterContext.HttpContext.Session.IsNewSession)
                {
                    //LogFormatHelper.LogRequestParams("filterContext.HttpContext.Session.IsNewSession");
                    filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary(new { Controller = "Account", Action = "Login" }));
                }
            }
        }

    }

 AccountController.cs

    [RequireHttps]
#endif
    [Authorize]
    [InitializeSimpleMembership]
    [LogAction]
    public class AccountController : Controller
    {
        public AccountController()
            : this(new FormsAuthenticationService(), new UserAuthenticator())
        {
            //this.FormsAuth = new FormsAuthenticationService();
        }
}

 NoResubmitAttribute.cs

    [AttributeUsage(AttributeTargets.All, AllowMultiple = false)]
    public class NoResubmitAttribute : ActionFilterAttribute
    {
        private static readonly string HttpMehotdPost = "POST";
        private static readonly string prefix = "postFlag";
        private string nameWithRoute;

        public override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            var controllerContext = filterContext.Controller.ControllerContext;
            if (!controllerContext.IsChildAction)
            {
                var request = controllerContext.HttpContext.Request;
                var session = controllerContext.HttpContext.Session;
                nameWithRoute = generateNameWithRoute(controllerContext);
                int sessionFlag = session[nameWithRoute] == null ? 0 : (int)session[nameWithRoute];
                int requestFlag = string.IsNullOrEmpty(request.Form[nameWithRoute]) ? 0 : int.Parse(request.Form[nameWithRoute]);
                // get or normal post: true;    
                bool isValid = !IsPost(filterContext) || sessionFlag == requestFlag;
                if (sessionFlag == int.MaxValue)
                {
                    sessionFlag = -1;
                }
                session[nameWithRoute] = ++sessionFlag;
                if (!isValid)
                {
                    filterContext.Result = new RedirectResult(GenerateUrlWithTimeStamp(request.RawUrl));
                    return;
                }
            }
            base.OnActionExecuting(filterContext);
        }

        /// <summary>
        /// Modify the url to avoid issue:
        /// When Redirect to itself in a F5 Refresh, the redirect doesn't work in client browser sometimes.
        /// </summary>
        /// <param name="url"></param>
        /// <returns></returns>
        private string GenerateUrlWithTimeStamp(string url)
        {
            return string.Format("{0}{1}timeStamp={2}", url, url.Contains("?") ? "&" : "?", (DateTime.Now - DateTime.Parse("2010/01/01")).Ticks);
        }

        private bool IsPost(ActionExecutingContext filterContext)
        {
            return filterContext.HttpContext.Request.HttpMethod == HttpMehotdPost;
        }

        private string generateNameWithRoute(ControllerContext controllerContext)
        {
            StringBuilder sb = new StringBuilder(prefix);
            foreach (object routeValue in controllerContext.RouteData.Values.Values)
            {
                sb.AppendFormat("_{0}", routeValue);
            }
            return sb.ToString();
        }

        public override void OnResultExecuted(ResultExecutedContext filterContext)
        {
            base.OnResultExecuted(filterContext);

            if (!filterContext.IsChildAction && !(filterContext.Result is RedirectResult))
            {
                //string format = "<script type='text/javascript'>$(function () [[ $('form').each(function()[[$('<input type=hidden id={0} name={0} value={1} />').appendTo($(this));]])]]); </script>";
                string format = "<script type='text/javascript'> var forms = document.getElementsByTagName('form'); for(var i = 0; i<forms.length; i++)[[var ele = document.createElement('input'); ele.type='hidden'; ele.id=ele.name='{0}'; ele.value='{1}'; forms[i].appendChild(ele);]] </script>";
                string script = string.Format(format, nameWithRoute, filterContext.HttpContext.Session[nameWithRoute]).Replace("[[", "{").Replace("]]", "}");
                filterContext.HttpContext.Response.Write(script);
            }
        }
    }

 [ValidateAntiForgeryToken]

EmailAttribute.cs

 

 public class EmailAttribute : RegularExpressionAttribute
    {
        public EmailAttribute()
            : base("[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?")
        {
            ErrorMessage = "The field {0} is an invalid email address.";
        }
    }

 

posted on 2017-06-15 16:07  白马酒凉  阅读(179)  评论(0编辑  收藏  举报

导航