1_asp.netCoreMVC中使用Session和访问项目根目录及获取Get和pos传递的t数据

1. 获取post和get传递的数据

1.1. post

Request.Form["userName"];

1.2. get

Request.Query["userName"]

1.3. 获取请求信息

            string path = Request.Path;//请求路径
            string method = Request.Method;//请求类型
            string contentType = Request.Headers["user-agent"];//请求头
            string ip = HttpContext.Connection.RemoteIpAddress.ToString();//请求ip

2. 获取项目根目录

使用IWebHostEnvironment接口的实例即可,为了避免在类中实例化该接口的实例增加耦合,我们使用构造函数注入它的实例。

①在控制器类里声明容器字段接收
private readonly IWebHostEnvironment _hostingEnvironment;

②在构造函数进行接收即可,框架会帮我们注入

  //构造函数注入,两个类之间的关系使用注入的方式而不是直接实例化,可以降低两个类之间的耦合
        public HomeController(ILogger<HomeController> logger, IWebHostEnvironment hostingEnvironment)
        {
            _hostingEnvironment = hostingEnvironment;
            _logger = logger;
        }

③然后即可在具体控制器里使用该字段了

   //获取项目的根目录
            string rootPath = _hostingEnvironment.ContentRootPath;

            //获取静态资源的根目录
            string wwwPath = _hostingEnvironment.WebRootPath;

3. 使用Session

要使用Session首先要注入Session服务,并且添加它的中间件。

3.1. 找到项目的Startup.cs类

找到该类的ConfigureServices方法。该方法作用:配置依赖注入 core原生支持依赖注入。framework需要自己创建容器。

在该方法里配置session的依赖注入
image

然后在Configure方法里使用这个session服务。称为配置中间件。

  //引入session的中间件(使用注入的session这个服务)
            app.UseSession();

3.2. 使用Session

在netCore里Session不能存对象了,可能是因为要跨平台,都是存字节。可以将字符串或者对象进行json序列化后存在里面。

3.2.1. Set方法

使用:
HttpContext.Session.Set("userName",System.Text.Encoding.UTF8.GetBytes("张三"));

读取:

            byte[] buffer;

            HttpContext.Session.TryGetValue("userName", out buffer);

            string str = System.Text.Encoding.Default.GetString(buffer);

3.2.2. GetString扩展方法

该方法可以存字符串,底层也是通过将字节数组转为字符串实现的。

使用:
HttpContext.Session.SetString("userName2", "张三2");

读取:
string str2 = HttpContext.Session.GetString("userName2");

3.2.3.自定义扩展方法用来存取对象

JsonConvert.SerializeObject该类需要nuget上下载包。引入后即可用来序列化为json字符串
image

namespace MyFirstNetCore
{
    public static class MySessionExtensions
    {
        public static void SetObj<T>(this ISession session, string key, T value)
        {
            string jsonStr = JsonConvert.SerializeObject(value);

            session.Set(key, System.Text.Encoding.Default.GetBytes(jsonStr));
        }


        public static T GetObj<T>(this ISession session, string key)
        {
            byte[] buffer;
            bool isValue=session.TryGetValue(key, out buffer);

            if (isValue)
            {
                string str = Encoding.Default.GetString(buffer);

               return JsonConvert.DeserializeObject<T>(str);
            }
            else
            {
                return default(T);
            }

        }

    }
}

使用:

 PersonViewModel person = new PersonViewModel() { UserName = "ace",Age=18 };

            HttpContext.Session.SetObj("person", person); 

读取:
PersonViewModel person= HttpContext.Session.GetObj<PersonViewModel>("person");

posted @ 2022-05-04 11:02  青仙  阅读(242)  评论(0编辑  收藏  举报