RestSharp请求https添加Cookie信息的正确姿势
后台读取cookie
C# 全选
/// <summary>
/// 判断用户是否已经登录(解决Session超时问题)
/// </summary>
public bool IsUserLogin()
{
//如果Session为Null
string str = HttpContext.Session.GetString(YESKeys.SESSION_USER_INFO);
if (!String.IsNullOrWhiteSpace(str))
{
return true;
}
else
{
//检查Cookies
string userid = this.GetCookies(YESKeys.COOKIE_USER_NAME_REMEMBER);
string password = this.GetCookies(YESKeys.COOKIE_USER_PWD_REMEMBER);
if (!String.IsNullOrWhiteSpace(userid) && !String.IsNullOrWhiteSpace(password))
{
var user = entities.sys_User.Where(w => w.UserID == userid && w.Pwd == password).FirstOrDefault();
if (user == null)
{
return false;
}
// 用户状态异常
if (user.Status != 1)
{
return false;
}
if (user != null)
{
this.SetSessionUser(new UserInfo()
{
UserID = user.UserID,
Account = user.Account,
Ali_ID = user.Ali_ID,
Email = user.Email,
Phone = user.Phone,
RegisterTime = user.RegisterTime,
UserName = user.UserName,
VIPLevel = (EnumVIPLevel)user.VIPLevel,
WX_ID = user.WX_ID,
IsAdmin = user.IsAdmin == "Y"
});
return true;
}
}
}
return false;
}
遇到问题
后台查看Cookie是空的,查看Cookie代码
HttpContext.Request.Cookies
既然Cookie是空的,那么用户的Session自然就没有咯,所以用户还是处于未登录状态
解决方案
使用AddParameter方式添加Cookie
C# 全选
request.AddParameter(_cookie_name, _cookie_value, ParameterType.Cookie);
请求完整的代码
C# 全选
RestClient client = new RestClient($"{txt_host.Text}/{txt_pathadmin.Text}/SysUser/index");
client.Timeout = -1;
var request = new RestRequest(Method.GET);
foreach (var v in cookies)
{
request.AddParameter(v.Name, v.Value, ParameterType.Cookie);
}
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
失败的方法集合
1)Postman请求查看代码中的方法
C# 全选
var client = new RestClient("https://www.yesdotnet.com/admin666/SysUser/index");
client.Timeout = -1;
var request = new RestRequest(Method.GET);
request.AddHeader("cookie", "UM_distinctid=17d8e3a2a47e5a-ccccc-59191459-1fa400-17d8e3a2a48e7a; _ga=GA1.2.1145473237.1638932615; _gid=GA1.2.464309591.1638932615; .AspNetCore.Session=CfDJ8FTfHTouETlFraeJ811RiNGwLlvLXhCGZCds1nDmaabcteQ9t3a0AacmwHsKbf0wclOWRfE71zMibpvxdhtYPn01P46wYE5F4SK+3/hkVVhY/OklEiO5CjgD/oXUd8dREROz9Og2PbuqF+MoR2hAQv69dwTCyJ+uRFIDl0ya2FG; Hm_lvt_8a2cbd82a647d10cdd95d1d2d2946c78=; Hm_lpvt_8a2cbd82a647d10cdd95d1d2d2946c78=1639015258; yes_cookie_user_name_remember=*****; yes_cookie_user_pwd_remember=**********");
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
2)设置Header Set-Cookie方法
网上有人推荐试用Header的Set-Cookie
C# 全选
RestClient client = new RestClient($"{txt_host.Text}/{txt_pathadmin.Text}/SysUser/index");
client.Timeout = -1;
var request = new RestRequest(Method.GET);
foreach (var v in cookies)
{
request.AddHeader("Set-Cookie", v.Name+"="+v.Value+ "; Path=/");
}
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
经过测试,后台依然无法获取到正确的Cookie
版权声明:本文为YES开发框架网发布内容,转载请附上原文出处连接
post 管理员