mvc 控制器忽略某些方法
2024-10-16 20:24:19
需求:登录信息验证,需要忽略登录注册这些接口的验证,通过给方法加忽略过滤器实现
1.需要忽略的方法加[IgnoreLoginFilter]
2.定义忽略过滤器
public class IgnoreLoginFilterAttribute :Attribute
{ }
3.Global.asax注册全局过滤器
public class MvcApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
}
}
4.过滤器配置注册过滤器
public class FilterConfig
{
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new HandleErrorAttribute());
filters.Add(new UserAuthorizationFilter());
}
}
5.通过过滤器个数来判断是否需要验证登录信息(这个效果不太好,应该判断是否有忽略验证登录信息过滤器)
public class UserAuthorizationFilter : IAuthorizationFilter
{
private static readonly string SID = "SID";
private static readonly string UID = "UID"; public void OnAuthorization(AuthorizationContext filterContext)
{
var action = filterContext.ActionDescriptor.ActionName;
var attributes = filterContext.ActionDescriptor.GetCustomAttributes(typeof(IgnoreLoginFilterAttribute),false);
if (attributes.Length == )
{
HttpCookie cookie = filterContext.HttpContext.Request.Cookies.Get(SID);
var cookieSID = filterContext.HttpContext.Request.Cookies[SID];
var cookieUID = filterContext.HttpContext.Request.Cookies[UID];
if (cookieSID != null && cookieUID != null)
{
var sessionEnabel = checkSession(cookieSID.Value, cookieUID.Value); if (!sessionEnabel)
{
filterContext.Result = new JsonResult()
{
JsonRequestBehavior = JsonRequestBehavior.AllowGet,
Data = new ResultInfo(, "登录超时")
};
}
}
else
{
filterContext.Result = new JsonResult()
{
JsonRequestBehavior = JsonRequestBehavior.AllowGet,
Data = new ResultInfo(, "登录超时")
};
}
}
} private static bool checkSession(string sid, string uid)
{
//服务名:ZJCX.ZJCD.APP.Session.Service
var resourceUri = string.Format("Session/CheckSessionStatus?sessionID={0}&zjID={1}", sid, uid);
var result = ZJCX.WebAPI.Connect.WebAPIConnector.Default.Get("ZJCX.ZJCD.APP.Session.Service", resourceUri).Content.ReadAsStringAsync().Result;
var resultObj = Newtonsoft.Json.JsonConvert.DeserializeAnonymousType(result, new { code = }); //apiResponse = webApiConnector.Get(serviceName, resourceUri, requestServiceModel2);
return resultObj.code == ;
}
}
6.方法加过滤器
/// <summary>
/// 登录接口
/// </summary>
/// <param name="mobile"></param>
/// <param name="code"></param>
/// <returns></returns>
[HttpPost]
[IgnoreLoginFilter]
public ActionResult Login(string mobile, string code)
{
//登录业务代码...
}
最新文章
- 使用 PowerShell 自动化 CloudServices 发布
- Ubuntu下更改网卡名称
- UVa1636 Headshot
- F7控件
- 《30天自制操作系统》05_day_学习笔记
- NovaMind使用教程
- 事务——sql server中的事务应用举例
- static final的理解
- 转换framebuffer实现安卓截图
- Git---Git及GitHub使用笔记
- C#整理
- JS限制 获取动太ID,播放视频
- CRM权限管理
- PHP获取项目所有控制器方法名称
- 2018-01-15 Antlr4: 修改语法规则更接近普通BNF格式
- less 前端css利器 工程化、逻辑化 css 文件
- 04C++const增强、枚举的增强
- 忙里偷闲写的小例子---读取android根目录下的文件或文件夹
- 让 Oracle 11g 32位运作在64位 Windows 上
- WebForm——浏览器兼容、旋转、缩放、倾斜、移动