VS - ActionFilterAttribute

Global.asax.cs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
   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

1
2
3
4
5
6
7
8
public class FilterConfig
{
    public static void RegisterGlobalFilters(GlobalFilterCollection filters)
    {
        filters.Add(new HandleErrorAttribute());
        filters.Add(new LogAction() { });
    }
}

 LogAction.cs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
[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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[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

1
2
3
4
5
6
7
8
9
10
11
12
13
    [RequireHttps]
#endif
    [Authorize]
    [InitializeSimpleMembership]
    [LogAction]
    public class AccountController : Controller
    {
        public AccountController()
            : this(new FormsAuthenticationService(), new UserAuthenticator())
        {
            //this.FormsAuth = new FormsAuthenticationService();
        }
}

 NoResubmitAttribute.cs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
[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

 

1
2
3
4
5
6
7
8
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   白马酒凉  阅读(184)  评论(0编辑  收藏  举报

编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

导航

统计

点击右上角即可分享
微信分享提示