首页
视频
资源
登录
DJ王重阳
慢慢来
博主信息
排名
6
文章
6
粉丝
16
评论
8
文章类别
ORM_EF
3篇
.NET Core
2篇
最新文章
最新评价
{{item.articleTitle}}
{{item.blogName}}
:
{{item.content}}
关于我们
ICP备案 :
渝ICP备18016597号-1
网站信息:
2018-2024
TNBLOG.NET
技术交流:
群号656732739
联系我们:
contact@tnblog.net
欢迎加群
欢迎加群交流技术
原
.NET Core基础使用(对照Framework进行比较记录)
4487
人阅读
2021/5/29 21:51
总访问:
24048
评论:
0
收藏:
2
手机
分类:
.NET Core
#.NET Core基础使用 >1.[core接收get、post请求的参数获取(非路由传参)](#Requestgetpost) 2.[core的输出方式](#WriteType) 3.[core的session使用](#Session) 4.[core的cookie使用](#Cookie) 5.[core获取请求信息](#Information) 6.[core的相对路径获取](#Path) tn> 创建一个这个样子的项目:![项目类型](https://img.tnblog.net/arcimg/17726394069/98ac5c57832f403990e8006496324453.png "项目类型") tn3#<span id="Requestgetpost">core接收get、post请求的参数获取(非路由传参)<span> >- 在Framework中为了方便,无论是get请求还是post请求我们一般都使用`string str=Request[value].ToString();`来接收传递的值。 但是在Core中Request没有直接的索引方法,需要点里边的Query(get请求接收值)或者Form(post请求接收值),实现代码如下: ```csharp //接收get请求传递参数 string str = Request.Query[value].ToString(); //接收post请求传递参数 string str = Request.Form[value].ToString(); ``` tn3#<span id="WriteType">core的输出方式<span> >- 在Framework中若要在前台输出字符串,只需使用`Response.Write(value); `即可输出该字符串,并且无论字符串是中文、英文还是Html标签其皆可正常输出无乱码且显示其效果。 但是在Core中,原生输出语句采用字节的方式进行输出,并且在输出中文和Html标签时若不预先进行申明Response输出类型和编码方式就会出现乱码、无效果的情况,如下: ```csharp //申明Response输出类型和编码方式 Response.ContentType = "text/html;charset=UTF-8"; //输出字符串 Response.Body.WriteAsync(System.Text.Encoding.UTF8.GetBytes(value)); ``` tn3#<span id="Session">core的session使用<span> >- 在Framework中,原生Session仅可以存取字符串还可以存取对象,其存取代码如下: ```csharp //存储Session Session[key] = value; //获取Session 变量类型 变量名 = Session[key]; ``` - 但是在Core中,原生的Session只可以以字节的方式存储字符串,其不可以存储对象。并且如果我们直接使用Session进行存取其会报如下异常错误: ![异常报错](https://img.tnblog.net/arcimg/17726394069/db70fe703c764723a6bdbe4c9fdc159f.png "异常报错") 这因为在Core中Session本身就是一个中间件的形式,所以在使用Session之前我们需要进行Session的依赖注入和引入Session中间件,即在依赖注入的方法中书写`services.AddSession();`进行Session的依赖注入,在引入中间件的方法中书写`app.UseSession();`进行中间件的引入,然后就可以使用Core原生Session进行存取,代码如下: ```csharp //原生Core存S储ession HttpContext.Session.Set(key, System.Text.Encoding.UTF8.GetBytes(value)); //原生core获取已存Session byte[] getSession; HttpContext.Session.TryGetValue(key, out getSession); ``` - 为解决原生Session书写麻烦的问题,我们可以引入一个微软官方库`using Microsoft.AspNetCore.Http;`,这个库可以简化Session的存储和读取,其代码如下: ```csharp //存储Session HttpContext.Session.SetString(key,value); //获取已存Session string str = HttpContext.Session.GetString(key); ``` - 但是即使是这样,我们的Session依然不能存取对象,所以为了存取对象我们可以自己写一个有关Session存取对象的扩展方法(类似于在Framework中Cookie不能存取对象一样),实现代码如下: ```csharp //一个名为MySessionExtensions的静态类 public static class MySessionExtensions { //存储对象的扩展方法,传入两个参数:Session名称,需要存储的值(泛型) public static void SetObj<T>(this ISession session, string Key, T value) { //对需要存储的对象进行序列化 string jsonstr = JsonConvert.SerializeObject(value); //将序列化后的字符串转换为字节进行存储 byte[] byteArray = Encoding.Default.GetBytes(jsonstr); //将转换成的字节进行存储 session.Set(Key, byteArray); } //获取Session对象的扩展方法,传入一个参数:Session名称 public static T GetObj<T>(this ISession session,string Key) { //预先声明一个字节变量,用于接收存储的Session值 byte[] byteArray; //声明一个变量,用于接收`session.TryGetValue()`的返回值 bool Isvalue = session.TryGetValue(Key,out byteArray); //判断Isvalue是否为true,如果为true则表示通过这个Session名称获取到了值,为false则返回获取对象类型的默认值 if (Isvalue) { //将获取的字节变量转换成字符串 string str = Encoding.Default.GetString(byteArray); //通过反序列化将字符串反序列化成获取的对象类型的对象并返回 T val = JsonConvert.DeserializeObject<T>(str); return val; } else { return default(T); } } } ``` 然后在后台调用扩展方法即可,调用代码如下: ```csharp //自定义Session扩展方法存储对象 HttpContext.Session.SetObj(key, 存储的对象); //自定义Session扩展方法获取存储的对象 T 对象名称 = HttpContext.Session.GetObj<T>(key); ``` tn3#<span id="Cookie">core的cookie使用<span> >- 在Framework中,Cookie的存取如下: ```csharp ////Cookie进行存储 //创建Cookie HttpCookie httpCookie = new HttpCookie(key); //赋值给创建的Cookie httpCookie.Value =Server.UrlEncode(value); //输入流写入Cookie Response.Cookies.Add(httpCookie); ////获取Cookie存储的值 //通过Cookie的名称获取Cookie HttpCookie httpCookie=Request.Cookies[key]; //获取Cookie的值,Server.UrlDecode()解决获取Cookie值乱码问题 string str=Server.UrlDecode(httpCookie.Value); ``` - 在Core进行Cookie的存取,代码如下: ```csharp ////Cookie进行存储 //写入一个Cookie,进行存储 HttpContext.Response.Cookies.Append(key, value); ////获取Cookie存储的值 //预先创建一个string类型的变量,用于接收Cookie存储的值 string str=""; //获取Cookie的值 HttpContext.Request.Cookies.TryGetValue(key, out str); ``` tn3#<span id="Information">core获取请求信息<span> >- 获取请求地址 ```csharp string path = Request.Path; ``` - 获取请求方式 ```csharp string contentType =Request.Method; ``` - 获取请求的IP地址 ```csharp string ip = HttpContext.Connection.RemoteIpAddress.ToString(); ``` - 获取请求头信息 ```csharp //获取请求头信息 IHeaderDictionary headers = Request.Headers; //在请求头信息中获取请求的浏览器类型及版本、操作系统及版本、浏览器内核、等信息的标识 string userAgent = headers["User-Agent"].ToString(); ``` tn3#<span id="Path">core的相对路径获取<span> > 在程序编写中,一定会遇到图片、视频等存储路径问题,我们一般将上述文件存储在一个与项目有关的相对路径上 - 在Framework中,获取相对路径一般使用`Server.MapPath("~")`即可获取项目所在的根目录 - 在Core中,没有Server对象,所以需预先注入IWebHostEnvironment依赖即后面的_webHostEnvironment后,再获取根目录。通过`_webHostEnvironment.ContentRootPath;`获取整个项目的根目录;通过`_webHostEnvironment.WebRootPath;`获取静态资源的根目录
👈{{preArticle.title}}
👉{{nextArticle.title}}
评价
{{titleitem}}
{{titleitem}}
{{item.content}}
{{titleitem}}
{{titleitem}}
{{item.content}}