如何在.net核心2.0类库项目中使用会话

时间:2018-01-21 20:18:36

标签: .net session model-view-controller

我们有一个.net框架(4.5.1)asp.net网站,它对用户进行身份验证,并在.net框架类库中存储身份验证详细信息。当在目标asp.net .net框架(4.5.x)网站中引用时,此类库可以访问由原始网站传递的所有变量。

我们希望将目标应用程序更改为.net core 2.0 mvc。我要做的是编写.net核心(2.0)类库,它将在目标应用程序中引用并使用由原始应用程序传递的会话变量数据(它仍将保留在.net framework 4.5.1中)

原始类库使用HttpContext.Current.Session,我现在发现它不用于.net core 2.0。我想做的就是有一个.net 4.5 web应用程序将会话传递给.net核心2.0类库,并将其分配给一个将由.net core 2.0 mvc app访问的属性。

在下面的代码中始终存在空异常。我如何实现我想要做的事情,或者我应该使用.net框架mvc项目,因为一切都很好。不能相信像HttpContext.Current.Session这样常见的东西会变成这样的噩梦。

提前感谢您提供任何帮助。

`

using System;
using System.Web;
using System.Threading;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Http.Features;
using System.Text;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.AspNetCore.Builder;

namespace CLStandardCSharp1
{
    //this is a .net core 2.0 class library project 
    public class HttpStateDataFactory
    {
        static byte[] toBytes = Encoding.ASCII.GetBytes("Some test value");
        static byte[] outToBytes;

        private static IHttpContextAccessor _httpContextAccessor;
        private static ISession _sessionContext => _httpContextAccessor.HttpContext.Session;
        public HttpStateDataFactory(IHttpContextAccessor httpContextAccessor)
        {
           _httpContextAccessor = httpContextAccessor;
        }

        public static void SetToSession()
        {
            _sessionContext.Set("SessionName", toBytes);
        }

        public static string GetFromSession()
        {
            string data = _sessionContext.TryGetValue("SessionName", out outToBytes).ToString();
            return data;
        }

        public static string SessionNameValueForClient = "N/A";
        public static string SomeProperty
        {
            get
            {
                return SessionNameValueForClient= GetFromSession();
            }
            set
            {
                SessionNameValueForClient = value;
            }
        }
    }
}

`

1 个答案:

答案 0 :(得分:-1)

在项目的任何地方使用HttpContex并删除HttpContex中的函数:

using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Http.Features;

namespace MVC_CoreWebApp.Models
{
    public static class HttpContext2
    {
        public static HttpContext Current => new HttpContextAccessor().HttpContext;

        public static string UserHostAddress => Current.Features.Get<IHttpConnectionFeature>().RemoteIpAddress.ToString();
        public static string UserAgent => Current.Request.Headers["User-Agent"].ToString();
    }
}

在ASP.net核心2.1上成功测试