MVC从路由中匹配出Controler的名称
2016-03-14 10:41
351 查看
/// <summary>
/// Attribute for power Authorize
/// </summary>
public class AuthorizeIgnoreAttribute : Attribute
{
public AuthorizeIgnoreAttribute()
{
}
}
/// <summary>
/// 判断是否登陆,同时可以获取用户登陆状态和基础信息
/// </summary>
public class AuthorizeAndLoginedAttribute : Attribute
{
public AuthorizeAndLoginedAttribute()
{
}
}
/// <summary>
/// 方法执行前,如果没有登录就调整到Passport登录页面
/// </summary>
/// <param name="filterContext"></param>
protected override void OnActionExecuting(ActionExecutingContext filterContext)
{
var noAuthorizeAttributes = filterContext.ActionDescriptor.GetCustomAttributes(typeof(AuthorizeIgnoreAttribute), false);
if (noAuthorizeAttributes.Length > 0)
return;
base.OnActionExecuting(filterContext);
var token = filterContext.RequestContext.HttpContext.Request.Headers.Get("client_token");
//可以登陆也可以不登陆
var noAuthorizeGetUserInfoAttributes = filterContext.ActionDescriptor.GetCustomAttributes(typeof(AuthorizeAndLoginedAttribute), false);
if (noAuthorizeGetUserInfoAttributes.Length > 0)
{
if (!string.IsNullOrEmpty(token) && !string.IsNullOrWhiteSpace(token))
{
var loginInfo = GetLoginInfo(token);
if (loginInfo != null)
{
filterContext.RequestContext.HttpContext.Items["client_token"] = loginInfo;
return;
}
}
else
{
var loginInfo = new User.LoginInfo(-1, "");
filterContext.RequestContext.HttpContext.Items["client_token"] = loginInfo;
return;
}
}
else
{
//判断登陆
if (string.IsNullOrEmpty(token) || string.IsNullOrWhiteSpace(token))
{
//如果未登陆,先判断是否是商品搜索列表接口,如果是就把userid的值设为0
if (filterContext.RequestContext.RouteData.Values["action"].ToString() == "GetProSelect")
{
var loginInfo = new User.LoginInfo(0, "24fc7f23-ad33-4236-827e-11b830bba574");
filterContext.RequestContext.HttpContext.Items["client_token"] = loginInfo;
return;
}
else
{
var respons_json = new BY.Epack.APP.Interface.Model.ModelBase()
{
code = login_faile,
data = "",
msg = "没有登陆"
};
filterContext.Result = Json(respons_json, JsonRequestBehavior.AllowGet);
// return;
}
}
else
{
var loginInfo = GetLoginInfo(token);
if (loginInfo != null)
{
filterContext.RequestContext.HttpContext.Items["client_token"] = loginInfo;
return;
}
else
{
//登陆出错,需要重新登陆
var respons_json = new BY.Epack.APP.Interface.Model.ModelBase()
{
code = login_token_error,
data = "",
msg = "登陆异常,请重新登陆"
};
filterContext.Result = Json(respons_json, JsonRequestBehavior.AllowGet);
}
}
}
}
/// Attribute for power Authorize
/// </summary>
public class AuthorizeIgnoreAttribute : Attribute
{
public AuthorizeIgnoreAttribute()
{
}
}
/// <summary>
/// 判断是否登陆,同时可以获取用户登陆状态和基础信息
/// </summary>
public class AuthorizeAndLoginedAttribute : Attribute
{
public AuthorizeAndLoginedAttribute()
{
}
}
/// <summary>
/// 方法执行前,如果没有登录就调整到Passport登录页面
/// </summary>
/// <param name="filterContext"></param>
protected override void OnActionExecuting(ActionExecutingContext filterContext)
{
var noAuthorizeAttributes = filterContext.ActionDescriptor.GetCustomAttributes(typeof(AuthorizeIgnoreAttribute), false);
if (noAuthorizeAttributes.Length > 0)
return;
base.OnActionExecuting(filterContext);
var token = filterContext.RequestContext.HttpContext.Request.Headers.Get("client_token");
//可以登陆也可以不登陆
var noAuthorizeGetUserInfoAttributes = filterContext.ActionDescriptor.GetCustomAttributes(typeof(AuthorizeAndLoginedAttribute), false);
if (noAuthorizeGetUserInfoAttributes.Length > 0)
{
if (!string.IsNullOrEmpty(token) && !string.IsNullOrWhiteSpace(token))
{
var loginInfo = GetLoginInfo(token);
if (loginInfo != null)
{
filterContext.RequestContext.HttpContext.Items["client_token"] = loginInfo;
return;
}
}
else
{
var loginInfo = new User.LoginInfo(-1, "");
filterContext.RequestContext.HttpContext.Items["client_token"] = loginInfo;
return;
}
}
else
{
//判断登陆
if (string.IsNullOrEmpty(token) || string.IsNullOrWhiteSpace(token))
{
//如果未登陆,先判断是否是商品搜索列表接口,如果是就把userid的值设为0
if (filterContext.RequestContext.RouteData.Values["action"].ToString() == "GetProSelect")
{
var loginInfo = new User.LoginInfo(0, "24fc7f23-ad33-4236-827e-11b830bba574");
filterContext.RequestContext.HttpContext.Items["client_token"] = loginInfo;
return;
}
else
{
var respons_json = new BY.Epack.APP.Interface.Model.ModelBase()
{
code = login_faile,
data = "",
msg = "没有登陆"
};
filterContext.Result = Json(respons_json, JsonRequestBehavior.AllowGet);
// return;
}
}
else
{
var loginInfo = GetLoginInfo(token);
if (loginInfo != null)
{
filterContext.RequestContext.HttpContext.Items["client_token"] = loginInfo;
return;
}
else
{
//登陆出错,需要重新登陆
var respons_json = new BY.Epack.APP.Interface.Model.ModelBase()
{
code = login_token_error,
data = "",
msg = "登陆异常,请重新登陆"
};
filterContext.Result = Json(respons_json, JsonRequestBehavior.AllowGet);
}
}
}
}
相关文章推荐
- 分享微信开发Html5轻游戏中的几个坑
- Zend的MVC机制使用分析(二)
- ASP.NET MVC 4 捆绑和缩小实例介绍
- ASP.NET Mvc开发之查询数据
- ASP.NET MVC中将控制器分离到类库的实现
- asp.net实现在非MVC中使用Razor模板引擎的方法
- ASP.NET MVC中的AJAX应用
- 为ASP.NET MVC及WebApi添加路由优先级
- ASP.NET MVC中图表控件的使用方法
- ASP.NET MVC的四种验证编程方式
- 仅30行代码实现Javascript中的MVC
- ASP.NET MVC 3仿Server.Transfer效果的实现方法
- 如何在MVC应用程序中使用Jquery
- ASP.NET MVC小结之基础篇(二)
- ASP.NET小结之MVC, MVP, MVVM比较以及区别(一)
- Asp.net实现MVC处理文件的上传下载功能实例教程
- ASP.NET MVC小结之基础篇(一)
- 12种JavaScript常用的MVC框架比较分析
- 浅析Asp.net MVC 中Ajax的使用
- JSP使用MVC模式完成删除和修改功能实例详解