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