如何在抽象类的静态属性中使用HttpContext.Current.Session.

Sra*_*van 3 c# asp.net-mvc

我有一个ControllerBase抽象类,如下所示.

using System.Web;
using System.Web.Mvc;
public abstract class ControllerBase : Controller
{
    public static string SesssionId
    {
         get { return HttpContext.Current.Session["SessionId"]; }
    }
}
Run Code Online (Sandbox Code Playgroud)

我收到了错误

"对象引用是非静态字段,方法或属性'System.Web.Mvc.Controller.HttpContext.get"所必需的

但是我在其他静态类中使用了相同的并且没有出现上述错误.

我想知道HttpContext是如何可访问的而不是当前的.

谁能澄清我,上面有什么问题.

Den*_*nis 7

您的基类本身Controller指定了HttpContext属性.因此,在派生类中使用它时ControllerBase,编译器认为您要引用基类的此属性.

您可以使该属性非静态,如Wudzik在第一条评论中所建议的那样.我想这将是更清洁的方式.

如果需要将此属性保持为静态,则必须告诉编译器您要使用HttpContext命名空间类System.Web:

public static string SesssionId
{
     get { return System.Web.HttpContext.Current.Session["SessionId"]; }
}
Run Code Online (Sandbox Code Playgroud)