在ASP.NET Core中引用使用System.Web.HttpContext.Current的ASP.NET Framework 4.6.2

时间:2019-01-03 13:28:12

标签: c# asp.net .net-core

我在ASP.Net框架4.6中有一个类 SessionHelper 班级代码如下

using System;
using System.Web;
using MyPortal.Common.Entity;
using MyPortal.Common.Helper;

namespace MyPortal.BusinessLayer.Helper
{
    public static class SessionHelper
    {
        public static User GetLoggedInUser { get { return (User) GetFromSession(User.SESSION_LOGGEDIN_USER); } }
        public static User GetLoggedInExternalUser { get { return (User)GetFromSession(User.SESSION_LOGGEDIN_EXTERNAL_USER); } }

        public static string GetValueFromSession(string sessionKey)
        {
            return HttpContext.Current.Session[sessionKey] == null ? string.Empty : HttpContext.Current.Session[sessionKey].ToString();
        }

        public static void SaveInSession(string sessionKey, object sessionValue)
        {
            HttpContext.Current.Session[sessionKey] = sessionValue;
        }

        public static void RemoveSession(string sessionKey)
        {
            if (HttpContext.Current.Session[sessionKey]!=null)
                HttpContext.Current.Session.Remove(sessionKey);
        }

    }
}

现在,此SessionHelper类在MyPortal.BusinessLayer的许多地方都使用过,该项目或dll在ASP.NET Web项目中运行良好。

现在,我必须在ASP.NET Core项目中使用此BusinessLayer.dll,并想访问某些方法,例如在login.UserBalance中获取这些方法,而BusinessLayer.dll中的这些方法都使用SessionHelper,而SessionHelper本身使用HttpContext.Current.Session

现在我在ASP.NET Core中遇到错误

  

System.TypeLoadException HResult = 0x80131522消息=无法加载   从程序集“ System.Web”中键入“ System.Web.HttpContext”,   版本= 4.0.0.0,文化=中性,PublicKeyToken = b03f5f7f11d50a3a'。

1 个答案:

答案 0 :(得分:0)

理想的方法是使用IHttpContextAccessor。

在启动时,您可以编写如下代码:

public class UserRepository : IUserRepository
{
    private readonly IHttpContextAccessor _httpContextAccessor;

    public UserRepository(IHttpContextAccessor httpContextAccessor)
    {
        _httpContextAccessor = httpContextAccessor;
    }

    public void LogCurrentUser()
    {
        var username = _httpContextAccessor.HttpContext.User.Identity.Name;
        service.LogAccessRequest(username);
    }
}

然后,无论您想使用HttpContext哪里,都可以注入IHttpContextAccesor,如下例所示:

$ str=" this 'is shell' script 'to learn' "
$ echo $str
this 'is shell' script 'to learn'
$ perl -pe 's/\x27/sprintf("%s",++$i%2==0? "\"\x27" : "\x27\"")/ge' <<< "$str"
 this '"is shell"' script '"to learn"'
$

This documentation文章介绍了有关从各个位置访问httpcontext的信息。