对未经身份验证的ASP.NET MVC请求运行授权筛选器和操作筛选器

Bry*_*isi 4 c# asp.net asp.net-mvc asp.net-membership asp.net-authorization

我用几个动作过滤器装饰了我的基本控制器.他们工作正常.

其中一个过滤器设置了请求 - 例如根据域设置文化等.

我还有一些需要使用Authorize属性进行授权的操作.

我的问题是,当用户尝试请求他们无权访问的页面时,授权过滤器会启动并将其重定向到一个页面,告诉他们他们无法访问该页面.

问题是动作过滤器从不运行,因此永远不会设置文化和其他请求数据.这有效地导致视图中的语言错误并且缺少其他数据.

我知道授权过滤器首先运行,但我的问题是:我如何设计这样,以便我可以确保在返回视图之前始终运行某些方法,无论授权如何.

希望有道理.

hwi*_*ers 6

根据此文档(在Filter Order标题下),授权过滤器始终在Action过滤器之前运行.这意味着搞乱Order属性无济于事.

我认为处理此问题的最佳方法是编写自己的Authorization属性(通过子类化AuthorizeAttribute和覆盖AuthorizeCore)并在授权失败时手动运行操作过滤器.