c# - MVC Controller 访问

标签 c# asp.net-mvc asp.net-mvc-3

我们的应用程序正在从 WebForms 迁移到 MVC。我们有不同的方式来处理授权。查询数据库 View 以验证用户授权。此 View 根据每个用户返回所有菜单层次结构。例如,如果 User1 试图访问名为 SecretList.aspx 的页面,则通过菜单层次结构(在授权后保存在 HTTP session 中)应用搜索以检查访问权限。如果该用户存在与 SecretList.aspx 相关的菜单项,则授予访问权限。

我的问题是,如何在 ASP.NET MVC 3 中实现这种方法?

我不想为每个 Controller 操作添加属性,我已经阅读过有关路由约束自定义 Controller 的信息。

要路由约束,我可以访问 HTTP session 并检索我的菜单层次结构以进行授权查询吗?

对于自定义 Controller ,我应该考虑重载哪个方法?在 Controller 执行完整的 Action 代码之前,我可以检查授权并重定向到另一个 View 吗?

还有什么更好的主意吗?

最佳答案

我会使用全局添加到所有操作的自定义操作过滤器,它的工作方式与内置的授权属性非常相似。 Action 过滤器在路由已解析并创建 Controller 后运行(因此传递给 Controller ​​的任何内容都必须可由任何用户构造)然后它可以检查用户是否可以执行 Action 或者是否应该返回另一个 ActionResult。

我强烈建议查看 MVC 源代码(或使用像 ILSpy 这样的工具)来查看授权属性的代码。

您可以使用自定义路由约束,但这实际上意味着用户不存在该路由,而不是不允许他们访问。

关于c# - MVC Controller 访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10308501/

相关文章:

c# - 将参数替换为表达式

asp.net-mvc - Silverlight 3 是否改变了 MVC 与 Silverlight 的问题?

javascript - Bootstrap Modal,在单击按钮时调用 Action Result 方法

asp.net-mvc - 如何避免在 MVC4 中使用 ViewBag 在 Controller 和 View 之间传递查询值

javascript - 在具有复杂数组的 Controller 中绑定(bind) MVC 模型

c# - linq连接查询从第二个表中获取单条记录

c# - 如何简化多个构造函数?

c# - ElasticSearch & Nest - 错误的转换

c# - 调用 Controller 操作 MVC5

asp.net - mvc3中如何实现URL重写?