tnblog
首页
视频
资源
登录
慢慢来
排名
11
文章
201
粉丝
10
评论
13
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:50010702506256
欢迎加群交流技术

.NET Core基础使用(对照Framework进行比较记录)

6243人阅读 2021/5/29 21:51 总访问:32190 评论:0 收藏:2 手机
分类: .NET Core

.NET Core基础使用

1.core接收get、post请求的参数获取(非路由传参)
2.core的输出方式
3.core的session使用
4.core的cookie使用
5.core获取请求信息
6.core的相对路径获取

创建一个这个样子的项目:项目类型

core接收get、post请求的参数获取(非路由传参)

  • 在Framework中为了方便,无论是get请求还是post请求我们一般都使用string str=Request[value].ToString();来接收传递的值。
    但是在Core中Request没有直接的索引方法,需要点里边的Query(get请求接收值)或者Form(post请求接收值),实现代码如下:
    1. //接收get请求传递参数
    2. string str = Request.Query[value].ToString();
    3. //接收post请求传递参数
    4. string str = Request.Form[value].ToString();

core的输出方式

  • 在Framework中若要在前台输出字符串,只需使用Response.Write(value);即可输出该字符串,并且无论字符串是中文、英文还是Html标签其皆可正常输出无乱码且显示其效果。
    但是在Core中,原生输出语句采用字节的方式进行输出,并且在输出中文和Html标签时若不预先进行申明Response输出类型和编码方式就会出现乱码、无效果的情况,如下:
    1. //申明Response输出类型和编码方式
    2. Response.ContentType = "text/html;charset=UTF-8";
    3. //输出字符串
    4. Response.Body.WriteAsync(System.Text.Encoding.UTF8.GetBytes(value));

core的session使用

  • 在Framework中,原生Session仅可以存取字符串还可以存取对象,其存取代码如下:
    1. //存储Session
    2. Session[key] = value;
    3. //获取Session
    4. 变量类型 变量名 = Session[key];
  • 但是在Core中,原生的Session只可以以字节的方式存储字符串,其不可以存储对象。并且如果我们直接使用Session进行存取其会报如下异常错误:
    异常报错
    这因为在Core中Session本身就是一个中间件的形式,所以在使用Session之前我们需要进行Session的依赖注入和引入Session中间件,即在依赖注入的方法中书写services.AddSession();进行Session的依赖注入,在引入中间件的方法中书写app.UseSession();进行中间件的引入,然后就可以使用Core原生Session进行存取,代码如下:
    1. //原生Core存S储ession
    2. HttpContext.Session.Set(key, System.Text.Encoding.UTF8.GetBytes(value));
    3. //原生core获取已存Session
    4. byte[] getSession;
    5. HttpContext.Session.TryGetValue(key, out getSession);
  • 为解决原生Session书写麻烦的问题,我们可以引入一个微软官方库using Microsoft.AspNetCore.Http;,这个库可以简化Session的存储和读取,其代码如下:
    1. //存储Session
    2. HttpContext.Session.SetString(key,value);
    3. //获取已存Session
    4. string str = HttpContext.Session.GetString(key);
  • 但是即使是这样,我们的Session依然不能存取对象,所以为了存取对象我们可以自己写一个有关Session存取对象的扩展方法(类似于在Framework中Cookie不能存取对象一样),实现代码如下:
    1. //一个名为MySessionExtensions的静态类
    2. public static class MySessionExtensions
    3. {
    4. //存储对象的扩展方法,传入两个参数:Session名称,需要存储的值(泛型)
    5. public static void SetObj<T>(this ISession session, string Key, T value) {
    6. //对需要存储的对象进行序列化
    7. string jsonstr = JsonConvert.SerializeObject(value);
    8. //将序列化后的字符串转换为字节进行存储
    9. byte[] byteArray = Encoding.Default.GetBytes(jsonstr);
    10. //将转换成的字节进行存储
    11. session.Set(Key, byteArray);
    12. }
    13. //获取Session对象的扩展方法,传入一个参数:Session名称
    14. public static T GetObj<T>(this ISession session,string Key) {
    15. //预先声明一个字节变量,用于接收存储的Session值
    16. byte[] byteArray;
    17. //声明一个变量,用于接收`session.TryGetValue()`的返回值
    18. bool Isvalue = session.TryGetValue(Key,out byteArray);
    19. //判断Isvalue是否为true,如果为true则表示通过这个Session名称获取到了值,为false则返回获取对象类型的默认值
    20. if (Isvalue)
    21. {
    22. //将获取的字节变量转换成字符串
    23. string str = Encoding.Default.GetString(byteArray);
    24. //通过反序列化将字符串反序列化成获取的对象类型的对象并返回
    25. T val = JsonConvert.DeserializeObject<T>(str);
    26. return val;
    27. }
    28. else
    29. {
    30. return default(T);
    31. }
    32. }
    33. }
    然后在后台调用扩展方法即可,调用代码如下:
    1. //自定义Session扩展方法存储对象
    2. HttpContext.Session.SetObj(key, 存储的对象);
    3. //自定义Session扩展方法获取存储的对象
    4. T 对象名称 = HttpContext.Session.GetObj<T>(key);

core的cookie使用

  • 在Framework中,Cookie的存取如下:
    1. ////Cookie进行存储
    2. //创建Cookie
    3. HttpCookie httpCookie = new HttpCookie(key);
    4. //赋值给创建的Cookie
    5. httpCookie.Value =Server.UrlEncode(value);
    6. //输入流写入Cookie
    7. Response.Cookies.Add(httpCookie);
    8. ////获取Cookie存储的值
    9. //通过Cookie的名称获取Cookie
    10. HttpCookie httpCookie=Request.Cookies[key];
    11. //获取Cookie的值,Server.UrlDecode()解决获取Cookie值乱码问题
    12. string str=Server.UrlDecode(httpCookie.Value);
  • 在Core进行Cookie的存取,代码如下:
    1. ////Cookie进行存储
    2. //写入一个Cookie,进行存储
    3. HttpContext.Response.Cookies.Append(key, value);
    4. ////获取Cookie存储的值
    5. //预先创建一个string类型的变量,用于接收Cookie存储的值
    6. string str="";
    7. //获取Cookie的值
    8. HttpContext.Request.Cookies.TryGetValue(key, out str);

core获取请求信息

  • 获取请求地址
    1. string path = Request.Path;
  • 获取请求方式
    1. string contentType =Request.Method;
  • 获取请求的IP地址
    1. string ip = HttpContext.Connection.RemoteIpAddress.ToString();
  • 获取请求头信息
    1. //获取请求头信息
    2. IHeaderDictionary headers = Request.Headers;
    3. //在请求头信息中获取请求的浏览器类型及版本、操作系统及版本、浏览器内核、等信息的标识
    4. string userAgent = headers["User-Agent"].ToString();

core的相对路径获取

在程序编写中,一定会遇到图片、视频等存储路径问题,我们一般将上述文件存储在一个与项目有关的相对路径上

  • 在Framework中,获取相对路径一般使用Server.MapPath("~")即可获取项目所在的根目录
  • 在Core中,没有Server对象,所以需预先注入IWebHostEnvironment依赖即后面的_webHostEnvironment后,再获取根目录。通过_webHostEnvironment.ContentRootPath;获取整个项目的根目录;通过_webHostEnvironment.WebRootPath;获取静态资源的根目录
评价