2010-01-04 42 views
0

我正在使用ASP.NET MVC2 RC,并且我已经在Areas/Controller/Action规范之上构建了安全性,基本上使用一张表来告诉基础架构哪个角色有权执行哪个控制器操作。是否可以在MVC2 RC DataTokens集合中添加值?

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

RouteData.Values["area"] 

然后我检查了在数据库中。我的问题是,当我迁移从MVC 1 RTM到MVC2 RC中,区域云在DataTokens集合,如果被称为控制器是在根区,下面的代码返回null

RouteData.DataTokens["area"] 

你知道是否有任何方式告诉MVC,如果“区域”不在DataTokens集合中,它应该有string.Empty?

我试图避免修改我的代码来检查为null。

谢谢!

回答

0

为什么不简单检查RouteData.DataTokens [“area”]是否为空(或空),并假设它是默认区域?

编辑

道歉,我没有回答前仔细阅读你的问题的最后一行。修改代码有什么问题?

+0

因为我在很多地方使用它。但这就是我要做的,无论如何我必须更改RouteData.DataTokens的RouteData.Values – sabanito 2010-01-04 23:40:30

+0

如果您必须在很多地方更改它,您可能需要再看看如何以及何时执行评估。如果正确实施,您的[base]控制器上的一个简单的ActionFilter可轻松完成所有受影响操作的工作。祝你好运! – 2010-01-05 01:55:09

+0

Thx Nathan的注释,最后我在ControllerContext上创建了一个扩展方法,它为我提供了Area,并更改了每一段代码(由于它是安全基础结构,代码量不多)。这样,如果Area再次改变,我有一个地方去改变它! – sabanito 2010-01-06 00:19:47

1

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

这里的工作都是围绕该问题:

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