我在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'。
答案 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的信息。