C# 执行GET调用时未通过Cookie头

C# 执行GET调用时未通过Cookie头,c#,restsharp,restapi,C#,Restsharp,Restapi,前言: 这是我个人项目的一部分,该项目使用WinForms为多个通信设备构建一个控制GUI 遇到问题的代码部分位于表单的构造函数中 安装的其他NuGet软件包有:Newtonsoft.Json、RestSharp、SpecFlow和SpecFlow.Assist.Dynamic LoginForm和seatinfo是创建的两个基本类,仅用于存储和组织我的数据,它们除了属性声明之外没有其他编码 执行代码: using Newtonsoft.Json; using Newtonsoft.Json

前言:

  • 这是我个人项目的一部分,该项目使用WinForms为多个通信设备构建一个控制GUI
  • 遇到问题的代码部分位于表单的构造函数中
  • 安装的其他NuGet软件包有:Newtonsoft.Json、RestSharp、SpecFlow和SpecFlow.Assist.Dynamic
  • LoginFormseatinfo是创建的两个基本类,仅用于存储和组织我的数据,它们除了属性声明之外没有其他编码
执行代码:

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
        }
    }
}

这在某种程度上不适用于AddCookie()或AddHeader(),因此目前它们都在使用。希望这对别人有帮助,谢谢亚尔的阅读

因此,在重述中,我在API调用中缺少Cookie头,因此导致调用失败(设备未授权)

在使用AddCookie()方法之后,特别是:

    seatAvailRequest.AddCookie("sid", sessionID.ToString());
设备给了我一个不同的错误-404未找到,在401未经授权之前:

最后,我愚蠢的头脑使用了AddCookie()和AddHeader()以及voilá:

它起作用了!只有经过5个小时痛苦的调试和令人麻木的搜索之后。虽然新的包有点大,但我现在不必担心,或者现实地说,未来也不必担心


谢谢大家的关注,欢迎大家提出建议和改进

@mjwills感谢您的帖子链接。虽然我确实经历了那一次,但不幸的是没有帮助。但我终于找到了答案,并在下面发表了评论。干杯
    seatAvailRequest.AddCookie("sid", sessionID.ToString());