有一个公共变量的需求,我写成一个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还没生成
...全文
446 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
by_封爱 版主 2021-05-07
  • 打赏
  • 举报
回复
过滤器+特性
goodgame365 2021-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 2021-05-05
  • 打赏
  • 举报
回复
引用 3 楼 goodgame365 的回复:
[quote=引用 2 楼 Eason0807 的回复:]你这是framework下的MVC还是Asp.Net Core?
Asp.Net Core的[/quote] 搞个Filter,比如ActionFilter就行了
goodgame365 2021-05-05
  • 打赏
  • 举报
回复
引用 2 楼 Eason0807 的回复:
你这是framework下的MVC还是Asp.Net Core?
Asp.Net Core的
Eason0807 2021-05-04
  • 打赏
  • 举报
回复
你这是framework下的MVC还是Asp.Net Core?
楠小南 2021-05-04
  • 打赏
  • 举报
回复
HttpContext 是 控制器里面的一个属性,在构造函数里面当然用不了 实在想要 的话 就用依赖注入 吧 注入 IHttpContextAccessor 记得注册 services.AddHttpContextAccessor(); 哈,这样注入 在控制器里面获取 httpcontext 又好似多此一举

110,561

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧