【问题标题】:How to use sessions in a .net core 2.0 class library project如何在 .net core 2.0 类库项目中使用会话
【发布时间】:2018-06-30 11:27:38
【问题描述】:

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

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

原来的类库使用 HttpContext.Current.Session,我现在发现在 .net core 2.0 中没有使用。我想要做的就是让 .net 4.5 Web 应用程序将会话传递给 .net core 2.0 类库,并将其分配给将由 .net core 2.0 mvc 应用程序访问的属性。

在下面的代码中总是有一个空异常。我如何实现我想做的事情,或者我应该只使用 .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;
            }
        }
    }
}

`

【问题讨论】:

    标签: .net session model-view-controller


    【解决方案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 core 2.1 上成功测试

    【讨论】:

    • 这不起作用。 new HttpContextAccessor().HttpContext 为空。
    • @PAS 您必须在 http 请求开始后调用它。例如在controllerapp.Use()Startup.cs
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-30
    • 1970-01-01
    • 2018-12-08
    • 2018-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多