【问题标题】:Why does Restsharp returns different results in .net core vs.net framework?为什么 Restsharp 在 .net core vs.net framework 中返回不同的结果?
【发布时间】:2021-04-22 20:21:28
【问题描述】:

我有两个“相同”的控制台应用程序,一个针对 .NET Framework 4.7.2,另一个针对 net5.0。

在这两个应用程序中,我使用完全相同的方法,在 sn-p 下方:

var client = new RestClient("https://secure.xxxx.yy/login.aspx")
{
    Timeout = -1
};
var request = new RestRequest(Method.POST);
request.AddHeader("Connection", "keep-alive");
... //snip
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Cookies.FirstOrDefault(cookie => cookie.Name == "ASP.NET_SessionId")?.Value);

在 net5.0 版本中,response.Cookies 包含 3 个项目(有我要找的那个),但在 .NET Framework 版本中,response.Cookies 只包含 1 个项目(没有我要找的那个) ...

这是什么原因,我在 .NET Framework 中获得相同结果的可能性是什么? 我正在尝试创建一个 Excel VSTO 插件,所以我认为我绑定到了 .NET Framework,对吧?

在 VS 中的屏幕截图下方:

在 fiddler 的响应下方(两个 .net 版本相同):

HTTP/1.1 302 Found
Cache-Control: private
Content-Type: text/html; charset=utf-8
Location: /xxxxx.eu/authorized/home.aspx
Server: Microsoft-IIS/7.5
Access-Control-Allow-Origin: *
Set-Cookie: ASP.NET_SessionId=0hslsdigt5kpha30rtk4veoc; path=/; HttpOnly; SameSite=Lax
X-AspNet-Version: 4.0.30319
Set-Cookie: .ASPNET=F1B8BEB09F20EF52B75BBA81B5535EC580B873E5A65F43AEC779C27C50730998582DC814DCAF194206636ACFBA706E2DE90371071F9AEB6B03E0C8ACF0BDE44CB3844230CC2143B2307EBB4889C12764167E15CA3240A74B430156205F6CD53AC8982EBE8EF3FE51E09862DF5AB15A7145F8451357515C48D3F3F09D48E7D890; path=/; HttpOnly; SameSite=Lax
X-Powered-By: ASP.NET
Date: Thu, 22 Apr 2021 11:40:28 GMT
Content-Length: 156

【问题讨论】:

  • @phuzi,我已经与 Fiddler 确认过:两个请求都返回 3 个 cookie(而在 .NET Framework 版本中只能访问一个)
  • 您能否在问题中添加详细信息,包括 Fiddler 的详细信息?
  • 我添加了一些来自VS的截图;我会尝试对提琴手结果做同样的事情
  • 想知道您看不到的 Cookie 是否标记为 http-only 这通常意味着它们对 JavaScript 不可见,但想知道 RestSharp 是否正在做类似的事情

标签: c# restsharp


【解决方案1】:

正如@phuzi 提到的,cookie 不可用,因为它们被设置为 httponly。

给客户端添加一个cookiejar,我就可以得到需要的cookie了:

var site = new Uri("https://secure.xxxx.yy/login.aspx");
var client = new RestClient(site)

CookieContainer _cookieJar = new CookieContainer();
client.CookieContainer = _cookieJar;
//.... execute the request
var cookies = _cookieJar.GetCookies(site);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-09
    • 1970-01-01
    • 2012-07-28
    • 2013-03-10
    • 1970-01-01
    • 2017-04-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多