ASP.NET MVC会话

Car*_*any 2 extension-methods session-state asp.net-mvc-3

这是不好的做法吗?

using System.Web.Mvc;

namespace WebInventaris.Utils.Session
{
    public static class SessionControllerExtensions
    {
        public static void SetSessionVar<T>(this Controller controller, string field, T value)
        {
            controller.Session[field] = value;
        }

        public static T GetSessionVar<T>(this Controller controller, string field)
        {
            return (T) controller.Session[field];
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我正在尝试将Session与我的控制器分开,但我对这些方法并没有很好的感觉.

Dar*_*rov 5

直接从控制器使用会话没有任何问题(这是它作为Controller类的属性公开的原因之一).而且我没有看到更换的好处:

Session["foo"] = "bar";
Run Code Online (Sandbox Code Playgroud)

调用扩展方法:

this.SetSessionVar("foo", "bar");
Run Code Online (Sandbox Code Playgroud)

可能更有趣的是你的通用getter,但是它仍然不是类型安全的,因为你在这个方法中进行内部转换也可以在控制器动作中完成.总而言之,我不会说这是一个不好的做法,但我没有看到这样一个类的任何好处,它也使得你的代码更不易被其他需要了解这是一个扩展方法的开发人员阅读它只使用会话的场景.