2 mdq11111 mdq11111 于 2016.04.27 15:48 提问

asp.net MVC 中的过滤器 ,一个路径设置对应一个过滤器类的对象吗

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");
    }
}

3个回答

caozhy
caozhy   Ds   Rxr 2016.04.27 16:42

控制器类、单个方法、全局都可以设置过滤器,而且可以设置多个过滤器。

caozhy
caozhy 回复强迫症患者m: 只对本方法有效。过滤器是在请求发送的时候创建的。
一年多之前 回复
mdq11111
mdq11111 比如一个单个方法上有这个[CustAuthorize("admin")] 是对他单独拥有一个过滤器对象还是一个项目中只有一个过滤器对象,其他方法共用一个
一年多之前 回复
itcast_jwz_310
itcast_jwz_310   2016.06.28 09:51

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 里面你可以自己加自己所需要的切面执行的时候先走切面再走路由
CSDNXIAON
CSDNXIAON   2016.04.27 15:52

【转载】ASP.NET MVC的过滤器【Filters】
分享一个学习ASP.NET MVC 3的地址。
ASP.NET MVC的过滤器
----------------------同志你好,我是CSDN问答机器人小N,奉组织之命为你提供参考答案,编程尚未成功,同志仍需努力!

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!