我有一個對localhost服務器的請求有問題。restsharp - 響應對象中沒有cookie
要進行身份驗證,我需要兩個cookie,一個來自sendReqForToken()方法,一個來自sendLoginReq(字符串登錄,字符串通過)。
作爲響應,我從sendLoginReq獲取cookie,但不是來自sendReqForToken()。
我不知道爲什麼一個請求有一個cookie秒沒有。
有趣的是,我從sendReqForToken()方法得到正確的標記(響應內容是正確的),但沒有響應標題中的任何cookie。
這是sendReqForToken()方法體:
public void sendReqForToken()
{
string adres = Globals.TOKEN_URL;
RestRequest request = new RestRequest(adres, Method.GET);
var client = new RestClient();
client.CookieContainer = new CookieContainer();
client.ExecuteAsync(request, (response) =>
{
if (response.StatusCode == HttpStatusCode.OK)
{
var tokenValue = JsonConvert.DeserializeObject<Token.RootObject>(response.Content);
DataManager.Instance.authToken = tokenValue.authenticity_token;
if (response.Cookies.Count > 0)
{
var cookie = response.Cookies.FirstOrDefault();
DataManager.Instance.cookieJar.Add(new Uri(Globals.TOKEN_URL), new Cookie(cookie.Name, cookie.Value, cookie.Path, cookie.Domain));
}
}
else
{
}
});
}
response.Cookies.Count總是等於0 response.cookies屬性總是等於null。
這是sendLoginReq方法體:
public void sendLoginReq(string login, string pass)
{
login = "admin";
pass = "admin";
string adres = Globals.LOGIN_URL;
RestRequest request = new RestRequest(adres, Method.POST);
var client = new RestClient();
request.RequestFormat = DataFormat.Json;
try
{
request.AddBody(new
{
authenticity_token = DataManager.Instance.authToken,
commit = "Login",
utf8 = true,
user_session = new
{
email = login,
password = pass
}
});
}
catch
{
}
client.ExecuteAsync(request, (response) =>
{
if (response.StatusCode == HttpStatusCode.OK)
{
if (response.StatusCode == HttpStatusCode.OK)
{
var cookie = response.Cookies.FirstOrDefault();
DataManager.Instance.cookieJar.Add(new Uri(Globals.LOGIN_URL), new Cookie(cookie.Name, cookie.Value, cookie.Path, cookie.Domain));
}
}
else
{
}
});
}
在第二個方法我得到正確的cookie。
非常感謝任何想法。
謝謝,我前幾天修復了這個問題。我在我的ruby服務器中將HTTPOnly參數更改爲false。現在一切都很好! – user3163231
因此,我在'RestClient'中添加了一個新的'CookieContainer',然後在執行請求之後,RestClient的'CookieContainer'將會有cookie。然後我使用'GetCookieHeader()'獲取實際的cookie –