asp.net MVC 中的过滤器 ,一个路径设置对应一个过滤器类的对象吗 。还是多个路由对应一个过滤器对象。有没有大神给讲解下路由和过滤器的对应关系
代码如下:
控制器代码:
[CustAuthorize("list")]
[Route("list")]
public ActionResult List()
{
return View();
}
[CustAuthorize("admin")]
[Route("list")]
public ActionResult Admin()
{
return View();
}
过滤器代码:
public class CustAuthorizeAttribute :AuthorizeAttribute
{
private string[] roles;
public CustAuthorizeAttribute(params String[] role)
{
//roles = new string[] { "admin", "list" };
roles = role;
}
protected override bool AuthorizeCore(HttpContextBase httpContext)
{
String role = httpContext.Request.QueryString["role"];
if (role != null)
{
return roles.Contains(role);
}
return base.AuthorizeCore(httpContext);
}
protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
{
UrlHelper url = new UrlHelper(filterContext.RequestContext);
filterContext.Result = new RedirectResult("/Login");
}
}
控制器类、单个方法、全局都可以设置过滤器,而且可以设置多个过滤器。
mvc 有个通道网上有它的事件 在global中有它的第一个事件 Application_Start 在这里有
AreaRegistration.RegisterAllAreas();
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);//切面 你可以导航到这个方法在这里面添加一些切面也就是过滤器,代码依次执行
RouteConfig.RegisterRoutes(RouteTable.Routes);//路由 路由你可以自己设置 也可以用微软提供的默认路由
BundleConfig.RegisterBundles(BundleTable.Bundles);
路由
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",//控制器/方法/参数
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }//默认Home 控制器 Index 方法 后面id 是所带参数你也可以自己设置路由
);
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Login", action = "LoginIn", id = UrlParameter.Optional } 自己设的默认的
);
}
}
所有的路由信息还有偶过滤器都在App_Start 中 可以多看下 在FilterConfig 里面你可以自己加自己所需要的切面执行的时候先走切面再走路由