【问题标题】:Is it possible to add a value in MVC2 RC DataTokens collection?是否可以在 MVC2 RC DataTokens 集合中添加一个值?
【发布时间】:2012-05-23 21:44:36
【问题描述】:

我正在使用 ASP.NET MVC2 RC,并且我在区域/控制器/操作规范之上构建了安全性,基本上使用一个表来告诉基础架构哪个角色有权执行哪个控制器操作。

我用来获取“区域”的代码是这样的

RouteData.Values["area"]

然后我在数据库中检查了它。我的问题是,当我从 MVC 1 RTM 迁移到 MVC2 RC 时,area 进入 DataTokens 集合,如果被调用的控制器在根区域,则以下代码返回 null

RouteData.DataTokens["area"]

你知道有没有办法告诉 MVC,如果“区域”不在 DataTokens 集合中,它应该有 string.Empty?

我试图避免修改我的代码来检查它是否为空。

谢谢!

【问题讨论】:

    标签: asp.net-mvc


    【解决方案1】:

    作为一种解决方法,您可以手动将 RouteData.Values 中的值添加到 RouteData.DataTokens。但理想情况下,您需要解决根本原因。

    以下是该问题的解决方法:

            if (controllerContext.RouteData.Values.ContainsKey("area"))
            {
                ControllerContext.RouteData.DataTokens.Add("area", ControllerContext.RouteData.Values["area"]);
            }
    

    【讨论】:

      【解决方案2】:

      为什么不简单地检查 RouteData.DataTokens["area"] 是否为 null(或为空)并在它为默认区域时假定为默认区域?

      编辑

      抱歉,在回答之前我没有阅读您问题的最后一行。修改代码有什么问题?

      【讨论】:

      • 因为我在很多地方都在使用它。但这就是我要做的,无论如何我都必须为 RouteData.DataTokens 更改 RouteData.Values
      • 如果您必须在很多地方更改它,您可能需要再看看如何以及何时执行评估。如果正确实施,您的 [base] 控制器上的简单 ActionFilter 可以轻松完成所有受影响操作的工作。祝你好运!
      • 感谢 Nathan 对于 cmets,最后我在 ControllerContext 上创建了一个扩展方法,它为我提供了 Area 并更改了我拥有的每一段代码(代码不多,因为它是安全基础设施)。这样,如果 Area 再次更改,我就有一个地方可以更改它!
      猜你喜欢
      • 2016-02-27
      • 1970-01-01
      • 2020-03-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多