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的依赖注入
然后在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字符串
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");