如何从RestResponse中保存cookies并将其传递给下一个RestRequest?

8
如果有人能帮我解决问题,我会非常感激。
我使用RestSharp库编写了一个C#代码来与RightScale API交互。
代码可以使用一个用户名和密码正常工作,但是当我用新的用户名和密码替换时,我收到响应“Basic auth is deprecated for calls other than login. Please 'login' to get a session and pass the session back for further actions.”
有人可以指导我正确的方向吗?我觉得很奇怪,为什么代码只适用于一组凭据,而不适用于任何其他用户名和密码。
我该如何保存cookies并在下一个RestRequest中将它们作为引用传递?

应该使用RESTful,因为它适用于一个用户帐户,这意味着我可以使用RightScale API查询一个用户帐户。但是,如果只更改代码中的用户名和密码变量,它不允许我通过登录验证。可能需要保存cookies,但我不确定如何做到这一点。 - user1548923
3
抱歉,如果需要保存会话cookie,则根据定义,它不符合RESTful标准。但是无论如何,您可以查看 https://github.com/restsharp/RestSharp/wiki/Cookies - cHao
请问在这种情况下如何使用CookieContainer以便它被保存并且我可以在后续请求中使用。 var request = new RestRequest(); request.Resource = "login"; var client = new RestClient(); client.BaseUrl = _baseUrl; client.Authenticator = new HttpBasicAuthenticator(_username, _password); var myparm = new RestSharp.Parameter { Name = "X-API-VERSION", Value = "1.0", Type = ParameterType.HttpHeader }; request.AddParameter(myparm); var response = client.Execute(request); - user1548923
我不会解密所有这些。请将其编辑到问题中,以便可以适当地格式化。 - cHao
1个回答

8

RestSharp 102.4+支持在同一IRestClient的所有请求中使用共享的System.Net.CookieContainer。这样做可以使设置或取消响应中的任何cookie在后续请求中使用。要使用共享的CookieContainer,只需在使用RestClient实例之前设置属性即可:

var client = new RestClient("http://server/");
client.CookieContainer = new System.Net.CookieContainer();

来源:https://github.com/restsharp/RestSharp/wiki/Cookies

这篇文章介绍了使用RestSharp库处理HTTP cookies的方法。在发送HTTP请求时,服务器可能会返回一个或多个cookie,以便在客户端上保持状态。如果您需要在应用程序中管理这些cookie,可以使用RestSharp提供的CookieContainer类。该类允许您添加、获取和删除cookie,并将其与HTTP请求一起发送。请注意,CookieContainer不是线程安全的,因此您应该在单个线程中使用它。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接