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

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

5949人阅读 2021/5/29 21:51 总访问:30807 评论: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;获取静态资源的根目录
评价

net core 使用 EF Code First

下面这些内容很老了看这篇:https://www.tnblog.net/aojiancc2/article/details/5365 项目使用多层,把数据库访问...

.net mvc分部页,.net core分部页

.net分部页的三种方式第一种:@Html.Partial(&quot;_分部页&quot;)第二种:@{ Html.RenderPartial(&quot;分部页&quot;);}...

StackExchange.Redis操作redis(net core支持)

官方git开源地址https://github.com/StackExchange/StackExchange.Redis官方文档在docs里边都是官方的文档通过nuget命令下...

.net core 使用session

tip:net core 2.2后可以直接启用session了,不用在自己添加一次session依赖,本身就添加了使用nuget添加引用Microsoft.AspN...

通俗易懂,什么是.net?什么是.net Framework?什么是.net core?

朋友圈@蓝羽 看到一篇文章写的太详细太通俗了,搬过来细细看完,保证你对.NET有个新的认识理解原文地址:https://www.cnblo...

asp.net core2.0 依赖注入 AddTransient与AddScoped的区别

asp.net core主要提供了三种依赖注入的方式其中AddTransient与AddSingleton比较好区别AddTransient瞬时模式:每次都获取一...

.net core 使用 Kestrel

Kestrel介绍 Kestrel是一个基于libuv的跨平台web服务器 在.net core项目中就可以不一定要发布在iis下面了Kestrel体验可以使...

net core中使用cookie

net core中可以使用传统的cookie也可以使用加密的cookieNET CORE中使用传统cookie设置:HttpContext.Response.Cookies.Appe...

net core项目结构简单分析

一:wwwrootwwwroot用于存放网站的静态资源,例如css,js,图片与相关的前端插件等lib主要是第三方的插件,例如微软默认引用...

net core使用EF之DB First

一.新建一个.net core的MVC项目新建好项目后,不能像以前一样直接在新建项中添加ef了,需要用命令在添加ef的依赖二.使用Nug...

.net core使用requestresponse下载文件下载excel等

使用request获取内容net core中request没有直接的索引方法,需要点里边的Query,或者formstringbase64=Request.Form[&quot;f...

iframe自适应高度与配合net core使用

去掉iframe边框frameborder=&quot;0&quot;去掉滚动条scrolling=&quot;no&quot;iframe 自适应高度如果内容是固定的,那么就...

net core启动报错Unable to configure HTTPS endpoint. No server certificate was specified

这是因为net core2.1默认使用的https,如果使用Kestrel web服务器的话没有安装证书就会报这个错其实仔细看他的错误提示,其...

net core中使用url编码与解码操作

net core中暂时还没有以前asp.net与mvc中的server对象。获取url的编码与解码操作不能使用以前的server对象来获取。使用的是...

下载net core

官方下载地址:https://dotnet.microsoft.com/download 进来之后就可以看到最新的下载版本可以直接点击下载,也可以下载其...

net core使用依赖注入来装载EF的上下文对象

妹子情人节快乐~.net core中用了不少的依赖注入,官方文档中也推荐使用。这样使用依赖注入来管理ef对象,还是比较科学,比如...