zoukankan      html  css  js  c++  java
  • net4.x MVC架构迁移到asp.net core的HttpContext问题

    • HttpContext

    在Asp.net 4.x时代,我们通常的做法是通过HttpContext.Current获取当前请求的上下文进而获取到当前的User属性,所以问题的切入点在于我们如何获取当前的HttpContext上下文。

      在我们的Aspnet Core应用中,系统是通过注入HttpContext的访问器对象IHttpContextAccessor来获取当前的HttpContext。

    •  首先要在程序启动时注册到容器中HttpContextAccessor
    /// <summary>
            /// Register HttpContextAccessor
            /// </summary>
            /// <param name="services">Collection of service descriptors</param>
            public static void AddHttpContextAccessor(this IServiceCollection services)
            {
                services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
            }
    • Controllers因为引用了Microsoft.AspNetCore.Mvc;命令空间可以直接使用
    public virtual IActionResult GeneralCommon()
            {
                if (!_permissionService.Authorize(StandardPermissionProvider.ManageSettings))
                    return AccessDeniedView();
    
                //prepare model
                var model = _settingModelFactory.PrepareGeneralCommonSettingsModel();
    
                //notify admin that CSS bundling is not allowed in virtual directories
                if (model.MinificationSettings.EnableCssBundling && HttpContext.Request.PathBase.HasValue)
                    _notificationService.WarningNotification(_localizationService.GetResource("Admin.Configuration.Settings.GeneralCommon.EnableCssBundling.Warning"));
    
                return View(model);
            }
    • 中间件中使用HttpContext 
    public Task Invoke(Microsoft.AspNetCore.Http.HttpContext context, IWebHelper webHelper, IWorkContext workContext)
            {
                //set culture
                SetWorkingCulture(webHelper, workContext);
    
                //call the next middleware in the request pipeline
                return _next(context);
            }
    • 其他层则需要由容器注入后再使用,可以参考以下OrchardCore对HttpContent的定义和调用。
    namespace OrchardCore.Modules
    {
        public class DefaultOrchardHelper : IOrchardHelper
        {
            public DefaultOrchardHelper(IHttpContextAccessor httpContextAccessor)
            {
                HttpContext = httpContextAccessor.HttpContext;
            }
    
            public HttpContext HttpContext { get; set; }
        }
    }

    
    
    
     
  • 相关阅读:
    MySQL5.6配置文件详解
    Mysql5.7.13忘记密码及创建用户
    CentOS7.2.1511 安装Mysql-5.7.13
    DAY01
    DAY01
    DAY01
    开启Python自动化运维之路
    Java知识点-----------单例设计模式
    Java知识点-----------重写Object的equals方法
    Linux基础06——压缩、解压、安装命令
  • 原文地址:https://www.cnblogs.com/gougou1981/p/12307942.html
Copyright © 2011-2022 走看看