【发布时间】:2021-04-15 15:57:01
【问题描述】:
前言:
- 这是我为多个通信设备构建控制 GUI 的个人项目的一部分 - 不幸的是使用 WinForms。
- 遇到问题的代码部分位于表单的构造函数中。
- 安装的其他 NuGet 包有:Newtonsoft.Json、RestSharp、SpecFlow 和 SpecFlow.Assist.Dynamic。
- LoginForm 和 SeatsInfo 是为存储和组织我的数据而创建的两个基本类,除了属性声明之外,它们没有额外的编码。
执行代码:
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using RestSharp;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace CONTROL_UI
{
public partial class RunningConfig : Form
{
public RunningConfig()
{
InitializeComponent();
var client = new RestClient("CLIENT_URL");
var loginRequest = new RestRequest("api/login", Method.POST);
loginRequest.RequestFormat = DataFormat.Json;
loginRequest.AddHeader("Content-type", "application/json");
loginRequest.AddJsonBody(new LoginForm() { username = "admin", password = "", @override = true });
var loginRespone = client.Execute(loginRequest);
JObject sessionInfo = JObject.Parse(loginRespone.Content);
var sessionID = sessionInfo["sid"];
var seatAvailRequest = new RestRequest("api/seats", Method.GET);
seatAvailRequest.AddHeader("sid", sessionID.ToString());
seatAvailRequest.AddHeader("Cookie", "sid = " + sessionID.ToString());
var seatResponse = client.Execute(seatAvailRequest);
List<SeatsInfo> seatsInfo = JsonConvert.DeserializeObject<List<SeatsInfo>>(seatResponse.Content);
//Further Implementation
}
}
}
每次我成功授权连接到设备时都会生成sid,因此它们显然不同。
我预期视图的屏幕截图取自普通控制台应用程序中完全相同的代码块。那里一切正常。这两个程序上安装的所有 NuGet 包都是相同的版本,我什至尝试并排运行它们,但没有帮助。
调试屏幕截图显示,Parameters 确实包含 Cookie 标头:
标题由于某种原因没有通过。很想听听关于这个问题的一些想法,非常感谢!
目前的解决方案,只需添加另一个 AddCookie() 方法:
seatAvailRequest.AddHeader("sid", sessionID.ToString());
seatAvailRequest.AddHeader("Cookie","sid = " + sessionID.ToString());
seatAvailRequest.AddCookie("sid", sessionID.ToString());
这在某种程度上不适用于仅 AddCookie() 或 AddHeader(),所以现在他们都进入了。希望这对某人有所帮助,感谢大家的阅读!
【问题讨论】:
-
@mjwills 感谢您的帖子链接。虽然我确实经历了那个,但不幸的是没有帮助。但我终于设法弄清楚了,并且已经在下面发表了评论。干杯!