分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 代码编程

MVC中为站点添加是否开启过滤器

发布时间:2023-09-06 01:47责任编辑:沈小雨关键词:MVC

主要思路

添加一个Attribute以及Filter类,在Filter中根据是否存在Attribute来判断是否跳到站点维护页。

代码实现

Attribute:

 ???/// <summary> ???/// ?站点关闭时也可访问 ???/// </summary> ???[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method)] ???public class RunWhenSitePausedAttribute : Attribute ???{ ???}

Filter:

 ???/// <summary> ???/// 站点是否开启过滤器 ???/// </summary> ???public class PauseSiteCheckFilter : IAuthorizationFilter, ITransientDependency ???{ ???????public void OnAuthorization(AuthorizationContext filterContext) ???????{ ???????????if (filterContext == null) ???????????{ ???????????????throw new ArgumentNullException("filterContext"); ???????????} ???????????if (filterContext.IsChildAction) ???????????????return; ???????????//判断是否进入站点维护页 ???????????if (!isEnable)//获取后台设置,如果站点关闭则进入以下判断 ???????????{ ???????????????var context = HttpContext.Current; ???????????????var methodInfo = filterContext.ActionDescriptor.GetMethodInfoOrNull(); ???????????????var isDefined = CanRunWhenSitePaused(methodInfo); ???????????????if (!isDefined) ???????????????{ ???????????????????//跳转页面 ???????????????????var url = UrlHelper.GenerateUrl(null, "PausePage", "Home", new RouteValueDictionary { { "area", "" } }, ???????????????????????RouteTable.Routes, context.Request.RequestContext, true); ???????????????????filterContext.Result = new RedirectResult(url); ???????????????} ???????????} ???????} ???????/// <summary> ???????/// 检查是否存在[RunWhenSitePaused]属性 ???????/// </summary> ???????/// <param name="methodInfo"></param> ???????/// <param name="defaultValue"></param> ???????/// <returns></returns> ???????private bool CanRunWhenSitePaused(MethodInfo methodInfo, bool defaultValue = false) ???????{ ???????????if (methodInfo == null) ???????????{ ???????????????return false; ???????????} ???????????if (!methodInfo.IsPublic) ???????????{ ???????????????return false; ???????????} ???????????if (methodInfo.IsDefined(typeof(RunWhenSitePausedAttribute), true)) ???????????{ ???????????????return true; ???????????} ???????????var classType = methodInfo.DeclaringType; ???????????if (classType != null) ???????????{ ???????????????if (classType.IsDefined(typeof(RunWhenSitePausedAttribute), true)) ???????????????{ ???????????????????return true; ???????????????} ???????????} ???????????return defaultValue; ???????} ???}

MVC中为站点添加是否开启过滤器

原文地址:https://www.cnblogs.com/dotnetmonkey/p/8677140.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved