有一个公共变量的需求,我写成一个void ,但每个控制器都要加上,有没有更简洁的方法

goodgame365 2021-05-04 09:43:37

代码如下,
  public IActionResult Index()
{
GetAdminSession();
return View();
}
[Route("Singer")]
public IActionResult Singer()
{
GetAdminSession();
return View();
}
[Route("Chord")]
public IActionResult Chord()
{
GetAdminSession();
return View();
}
public void GetAdminSession()
{
if (HttpContext.Session.GetString("AdminLevel") != null)
ViewBag.AdminLevel = HttpContext.Session.GetString("AdminLevel");
}

GetAdminSession();用了三次,有没有更简洁的方法呢,我尝试放在构造器里,发现HttpContext永远为空,且出错,诂计到构造器这里,HttpContext还没生成
...全文
374 点赞 收藏 6
写回复
6 条回复
by_封爱 05月07日
过滤器+特性
回复 点赞
goodgame365 05月05日
引用 4 楼 Eason0807 的回复:
[quote=引用 3 楼 goodgame365 的回复:][quote=引用 2 楼 Eason0807 的回复:]你这是framework下的MVC还是Asp.Net Core?
Asp.Net Core的[/quote] 搞个Filter,比如ActionFilter就行了[/quote] 太感谢,的确这方法可行, 过滤器代码如下:
 public class CheckAdminSessionAttribute: ResultFilterAttribute
    {
        public override void OnResultExecuting(ResultExecutingContext context)
        {
            var adminClass = context.HttpContext.Session.GetString("AdminLevel");

            if (adminClass != null)
            {
                Controller controller = context.Controller as Controller;
                controller.ViewBag.AdminLevel = context.HttpContext.Session.GetString("AdminLevel");
            }
        }
    }
然后控制器只需在类前面加上 [CheckAdminSessionAttribute]这个就OK了
  [CheckAdminSessionAttribute]
    public class HomeController : BaseController
    {
        

        public IActionResult Index()
        {
            
            return View();
        }
     
        public IActionResult Singer()
        {
          
            return View();
        }
       
        public IActionResult Chord()
        {
            
            return View();
        }
       



    }
回复 点赞
Eason0807 05月05日
引用 3 楼 goodgame365 的回复:
[quote=引用 2 楼 Eason0807 的回复:]你这是framework下的MVC还是Asp.Net Core?
Asp.Net Core的[/quote] 搞个Filter,比如ActionFilter就行了
回复 点赞
goodgame365 05月05日
引用 2 楼 Eason0807 的回复:
你这是framework下的MVC还是Asp.Net Core?
Asp.Net Core的
回复 点赞
Eason0807 05月04日
你这是framework下的MVC还是Asp.Net Core?
回复 点赞
楠小南 05月04日
HttpContext 是 控制器里面的一个属性,在构造函数里面当然用不了 实在想要 的话 就用依赖注入 吧 注入 IHttpContextAccessor 记得注册 services.AddHttpContextAccessor(); 哈,这样注入 在控制器里面获取 httpcontext 又好似多此一举
回复 点赞
发动态
发帖子
C#
创建于2007-09-28

8.5w+

社区成员

64.0w+

社区内容

.NET技术 C#
社区公告
暂无公告