asp.net管道里所有在进入MVC流程之前的事件.beginrequest事件比如
MVC里有全局过滤器.自定义控制器类型.
你是说在这里RegisterGlobalFilters()?
@拖鞋王子: 上面这是2个解决方案``
1.在MVC流程钱的管道事件,一般就是beginrequest事件
2.mvc的全局过滤器,
@吴瑞祥: 第二个方案是FilterConfig的RegisterGlobalFilters()里面添加一个全局过滤器吧?
@拖鞋王子: 是的.
写一个子类继承自Controller,重写 BeginExecute 方法,然后你的所有控制器继承你所定义的子类。
这样也要每个控制器去继承,没有更更简单的办法
public class RoleFilter : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
if (filterContext.HttpContext.Session[ClientFilter.ClientUserKey] == null)
{
filterContext.HttpContext.Response.StatusCode = 401;
filterContext.HttpContext.Response.End();
}
}
}
[RoleFilter]
public class BaseController : Controller
{
}
这样也要每个控制器加上这个过滤器,没有更更简单的办法
@拖鞋王子: 只要控制器继承BaseController就行了
public partial class AdminController : BaseController
{
public ActionResult SaveCompany()
{
}
}
想不到更简单了
public class LoginAjaxFilter : BaseAuthorizeAttribute { /// <summary> /// 1001:用户未登录 /// </summary> /// <param name="filterContext"></param> public override void OnAuthorization(AuthorizationContext filterContext) { string path = GetRequestPath(filterContext); if (filterContext.HttpContext.IsNotNull() && filterContext.HttpContext.Session.IsNotNull() && filterContext.HttpContext.Session[CacheKey.SESSION_LOGIN_ADMIN].IsNull()) { filterContext.Result = new ContentResult() { Content = "90001" }; } } } ----------------------------------- public class BaseAuthorizeAttribute : AuthorizeAttribute --------------------------------------- [LoginFilter] public ActionResult UserList() { ViewBag.RoleList = BaseHelper.GetRoleList(string.Empty); ViewBag.DepartList = BaseHelper.GetDepartList(string.Empty); return View(); }