2011-03-30 98 views
6

如何在MVC3中将SessionStateAttribute设置为全局过滤器? 在我的Global.asax中,我在RegisterGlobalFilters方法中有这个。MVC SessionStateAttribute不能用作全局属性

filters.Add(new SessionStateAttribute(SessionStateBehavior.Disabled)); 

而在我的家庭控制器,我有这个。

public class HomeController : Controller 
{ 
    public ActionResult Index() 
    { 
     ViewBag.Message = "Welcome to ASP.NET MVC!"; 

     Session["Blend"] = "Will it blend?"; 

     return View(); 
    } 

    public ActionResult About() 
    { 
     return View(); 
    } 
} 

但由于某些原因,它仍然让我使用Session。然而,如果我使用该属性来修饰HomeController类本身,那么在使用会话关于对象引用为空的行上会出现一个错误,我猜如果会话永远不会创建,我会猜测这个错误?

我开始怀疑我的项目是否有问题。我一直在收到像这样的小问题,其标准行为是假设正常工作。

其他人有这样的事情的问题吗?

回答

11

SessionStateAttribute不是action filter,所以您不能将其添加为全局操作过滤器。这是一个特殊的属性,它允许你装饰你的控制器,并且对每个控制器的会话模式有更细致的控制。

要全局禁用会话的整个应用程序放在你的web.config以下:

<sessionState mode="Off" /> 
+5

哇,这是一种有趣的。你会惊讶我有多少网站使用SessionStateAttribute作为如何在MVC中使用全局过滤器的例子,我猜想他们没有一个在将它们发布到互联网之前实际测试了它们的示例:-P – 2011-03-30 18:15:55