排名
55
文章
5
粉丝
8
评论
4
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:
50010702506256


欢迎加群交流技术

.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请求接收值),实现代码如下:
//接收get请求传递参数
string str = Request.Query[value].ToString();
//接收post请求传递参数
string str = Request.Form[value].ToString();
core的输出方式
- 在Framework中若要在前台输出字符串,只需使用
Response.Write(value);
即可输出该字符串,并且无论字符串是中文、英文还是Html标签其皆可正常输出无乱码且显示其效果。
但是在Core中,原生输出语句采用字节的方式进行输出,并且在输出中文和Html标签时若不预先进行申明Response输出类型和编码方式就会出现乱码、无效果的情况,如下:
//申明Response输出类型和编码方式
Response.ContentType = "text/html;charset=UTF-8";
//输出字符串
Response.Body.WriteAsync(System.Text.Encoding.UTF8.GetBytes(value));
core的session使用
- 在Framework中,原生Session仅可以存取字符串还可以存取对象,其存取代码如下:
//存储Session
Session[key] = value;
//获取Session
变量类型 变量名 = Session[key];- 但是在Core中,原生的Session只可以以字节的方式存储字符串,其不可以存储对象。并且如果我们直接使用Session进行存取其会报如下异常错误:
这因为在Core中Session本身就是一个中间件的形式,所以在使用Session之前我们需要进行Session的依赖注入和引入Session中间件,即在依赖注入的方法中书写services.AddSession();
进行Session的依赖注入,在引入中间件的方法中书写app.UseSession();
进行中间件的引入,然后就可以使用Core原生Session进行存取,代码如下:
//原生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的存储和读取,其代码如下:
//存储Session
HttpContext.Session.SetString(key,value);
//获取已存Session
string str = HttpContext.Session.GetString(key);- 但是即使是这样,我们的Session依然不能存取对象,所以为了存取对象我们可以自己写一个有关Session存取对象的扩展方法(类似于在Framework中Cookie不能存取对象一样),实现代码如下:
然后在后台调用扩展方法即可,调用代码如下:
//一个名为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);
}
}
}
//自定义Session扩展方法存储对象
HttpContext.Session.SetObj(key, 存储的对象);
//自定义Session扩展方法获取存储的对象
T 对象名称 = HttpContext.Session.GetObj<T>(key);
core的cookie使用
- 在Framework中,Cookie的存取如下:
////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的存取,代码如下:
////Cookie进行存储
//写入一个Cookie,进行存储
HttpContext.Response.Cookies.Append(key, value);
////获取Cookie存储的值
//预先创建一个string类型的变量,用于接收Cookie存储的值
string str="";
//获取Cookie的值
HttpContext.Request.Cookies.TryGetValue(key, out str);
core获取请求信息
- 获取请求地址
string path = Request.Path;- 获取请求方式
string contentType =Request.Method;- 获取请求的IP地址
string ip = HttpContext.Connection.RemoteIpAddress.ToString();- 获取请求头信息
//获取请求头信息
IHeaderDictionary headers = Request.Headers;
//在请求头信息中获取请求的浏览器类型及版本、操作系统及版本、浏览器内核、等信息的标识
string userAgent = headers["User-Agent"].ToString();
core的相对路径获取
在程序编写中,一定会遇到图片、视频等存储路径问题,我们一般将上述文件存储在一个与项目有关的相对路径上
- 在Framework中,获取相对路径一般使用
Server.MapPath("~")
即可获取项目所在的根目录- 在Core中,没有Server对象,所以需预先注入IWebHostEnvironment依赖即后面的_webHostEnvironment后,再获取根目录。通过
_webHostEnvironment.ContentRootPath;
获取整个项目的根目录;通过_webHostEnvironment.WebRootPath;
获取静态资源的根目录
评价