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.";
}
}

VS - ActionFilterAttribute的更多相关文章

  1. .NET WebAPI 用ActionFilterAttribute实现token令牌验证与对Action的权限控制

    项目背景是一个社区类的APP(求轻吐...),博主主要负责后台业务及接口.以前没玩过webAPI,但是领导要求必须用这个(具体原因鬼知道),只好硬着头皮上了. 最近刚做完权限这一块,分享出来给大家.欢 ...

  2. 使用ActionFilterAttribute进行重定向注意事项

    1.分部视图方法不能添加该特性,会报子方法不能重定向操作的错误 2.必须用给filterContext.Result赋值的方法进行重定向,而不能用filterContext.HttpContext.R ...

  3. mvc 4 ActionFilterAttribute 特性,进行权限验证

    权限验证: /// <summary> /// 管理员身份验证 /// </summary> public class BasicAuthenticationAttribute ...

  4. 【原创】.NET Web API之filter ActionFilterAttribute 过滤器使用

    1.在filter类里面引用,与MVC里面的不同 using System.Web.Http.Controllers; using System.Web.Http.Filters; 2.filter类 ...

  5. mvc通过ActionFilterAttribute做登录检查

    1.0 创建Attribute using System; using System.Collections.Generic; using System.Linq; using System.Web; ...

  6. Web API Filter ActionFilterAttribute 使用

    WebApi 提供两种过滤器的类型: 1.ActionFilterAttribute 2.exceptionFilterAttribute 两个类都是抽象类,ActionFilter 主要实现执行请求 ...

  7. mvc5权限管理(简单登录):ActionFilterAttribute

    效果图: 1.控制器 public ActionResult Index() { return View(); } [HttpPost] public ActionResult Index(User ...

  8. MVC权限验证之ActionFilterAttribute

    参考:http://www.cnblogs.com/waitingfor/archive/2011/12/27/2303784.html ActionFilterAttribute是Action过滤类 ...

  9. MVC中利用ActionFilterAttribute过滤关键字

    在开发过程中,有时候会对用户输入进行过滤,以便保证平台的安全性.屏蔽的方法有很多种,但是今天我说的这种主要是利用MVC中的ActionFilterAttribute属性来实现.由于MVC天然支持AOP ...

  10. ASP.NET MVC ActionFilterAttribute的执行顺序

    http://diaosbook.com/Post/2014/6/3/execution-order-of-actionfilter-aspnet-mvc ASP.NET MVC里面我们要自定义Act ...

随机推荐

  1. kubernetes 实践三:使用kubeadm安装k8s1.16.0

    环境版本说明: 三台vmware虚拟机,系统版本CentOS7.6. Kubernetes 1.16.0,当前最新版. flannel v0.11 docker 18.09 使用kubeadm可以简单 ...

  2. Modelsim——工程建立和常用设置

    Modelsim是一款优秀的FPGA仿真软件,这里记录一下Modelsim的基本使用. 一.联合仿真 联合仿真,即Quartus ii自己调用Modelsim,Modelsim自动出现仿真波形. 1. ...

  3. git 学习笔记 ---安装

    Git是什么? Git是目前世界上最先进的分布式版本控制系统(没有之一). 安装Git 在Linux上安装Git 首先,你可以试着输入git,看看系统有没有安装Git: $ git The progr ...

  4. Spring Cloud Alibaba学习笔记(19) - Spring Cloud Gateway 自定义过滤器工厂

    在前文中,我们介绍了Spring Cloud Gateway内置了一系列的内置过滤器工厂,若Spring Cloud Gateway内置的过滤器工厂无法满足我们的业务需求,那么此时就需要自定义自己的过 ...

  5. Unity的学习笔记(鼠标移动控制视角移动)

    using UnityEngine; public class MouseLook : MonoBehaviour { , MouseX = , MouseY = } //定义一个枚举,移动xy,或者 ...

  6. 2.6_Database Interface JDBC及驱动类型

    JAVA语言参考ODBC,设计专用的数据库连接规范JDBC(JAVA Database Connectivity).目标是让Java开发人员在编写数据库应用程序时,可以有统一的接口,不依赖特定数据库A ...

  7. 苹果手机浏览器的$(document).on(“click”,function(){}) 绑定的事件点击无效

    需要给对应的元素加上 cursor: pointer  的css样式才可以生效点击事件:

  8. ZK中使用JS读取客户端txt文件内容问题

    最近写一个需求时遇到一个问题,用户需要通过点击一个按钮直接读取他自己电脑上D盘的一个txt文件内容显示到页面,因为项目现在是用ZK写的.我对于ZK也是刚刚了解不就,很多都还不是很熟.起初我是想用io流 ...

  9. UI5-技术篇-Hybrid App-3-Fiori 百度地图应用

    上一次在Jsbin中测试了百度地图应用:UI5-技术篇-Hybrid App-3-jsbin百度地图 ,主要思路:1.加载百度API  2.自定义控件  3.div标签加载地图,本文主要将相关实施过程 ...

  10. 微信小程序---客服消息接口调用,拿来即用

    如果本文对你有用,请爱心点个赞,提高排名,帮助更多的人.谢谢大家!❤ 如果解决不了,可以在文末进群交流. 如果对你有帮助的话麻烦点个[推荐]~最好还可以follow一下我的GitHub~感谢观看! 在 ...