You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Postman请求正常返回,同款C# RestSharp请求无结果问题排查

问题分析与解决方案

以下是导致Postman导出的RestSharp代码无法正常工作的几个核心原因及对应修复方案:

1. 请求体传递方式不符合application/x-www-form-urlencoded规范

当前代码直接将URL编码后的字符串作为请求体传递,但application/x-www-form-urlencoded类型要求数据以键值对形式由客户端自动编码,而非手动传入预编码字符串。这种方式会导致服务器无法正确解析请求参数。

修复方法:
解码command参数的原始值,使用AddFormParameter方法添加参数,让RestSharp自动处理编码逻辑。

2. 手动添加authority头引发冲突

authority是curl的自定义头,对应HTTP标准的Host头。RestSharp会自动根据请求URL生成合法的Host头,手动添加authority会导致服务器收到重复或无效的Host信息,触发验证失败。

修复方法:
删除request.AddHeader("authority", "dbh.smartschool.be");这一行代码。

3. Cookie处理方式不严谨

直接通过请求头添加Cookie,无法正确维护Cookie的会话状态(如HttpOnly属性),部分服务器会严格校验Cookie的传递方式。

修复方法:
使用RestSharp的CookieContainer管理Cookie,确保会话状态正确传递。

4. UA相关头部的转义错误

导出代码中sec-ch-ua等头部的字符串存在多余转义(如\"),导致实际发送的头部值与curl请求不一致,触发服务器的UA验证逻辑。

修复方法:
简化UA头部的字符串,移除多余转义字符,保证与curl请求的头部值完全一致。


修正后的代码示例

using RestSharp;
using System.Net;

namespace HelloWorldApplication
{
    class HelloWorld
    {
        static void Main(string[] args)
        {
            // 初始化带Cookie容器的客户端,维护会话状态
            var cookieContainer = new CookieContainer();
            var client = new RestClient("https://dbh.smartschool.be/index.php?module=Agenda&file=dispatcher")
            {
                Timeout = -1,
                CookieContainer = cookieContainer
            };

            // 向容器添加Cookie,替代手动添加Cookie头
            cookieContainer.Add(new Uri("https://dbh.smartschool.be"), new Cookie("pid", "77573bd5-8567-4bed-8f03-19211db08663"));
            cookieContainer.Add(new Uri("https://dbh.smartschool.be"), new Cookie("PHPSESSID", "s0qf6btgu15su1gesrubrm01lveov6far58r58r2vabvfpo60e"));

            var request = new RestRequest(Method.POST);
            // 移除多余的authority头,保留必要请求头
            request.AddHeader("accept", "*/*");
            request.AddHeader("accept-language", "nl-BE,nl-NL;q=0.9,nl;q=0.8,en-US;q=0.7,en;q=0.6");
            request.AddHeader("cache-control", "no-cache");
            request.AddHeader("content-type", "application/x-www-form-urlencoded; charset=UTF-8");
            request.AddHeader("origin", "https://dbh.smartschool.be");
            request.AddHeader("pragma", "no-cache");
            request.AddHeader("referer", "https://dbh.smartschool.be/");
            // 修正UA头的转义问题,与curl请求保持一致
            request.AddHeader("sec-ch-ua", "\"Chromium\";v=\"106\", \"Google Chrome\";v=\"106\", \"Not;A=Brand\";v=\"99\"");
            request.AddHeader("sec-ch-ua-mobile", "?0");
            request.AddHeader("sec-ch-ua-platform", "\"Windows\"");
            request.AddHeader("sec-fetch-dest", "empty");
            request.AddHeader("sec-fetch-mode", "cors");
            request.AddHeader("sec-fetch-site", "same-origin");
            client.UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36";
            request.AddHeader("x-requested-with", "XMLHttpRequest");

            // 使用AddFormParameter传递未编码的原始参数,让RestSharp自动处理编码
            var commandValue = @"<request>
	<command>
		<subsystem>agenda</subsystem>
		<action>get lessons</action>
		<params>
			<param name=""startDateTimestamp""><![CDATA[1666611595]]></param>
			<param name=""endDateTimestamp""><![CDATA[1667043595]]></param>
			<param name=""filterType""><![CDATA[false]]></param>
			<param name=""filterID""><![CDATA[false]]></param>
			<param name=""gridType""><![CDATA[2]]></param>
			<param name=""classID""><![CDATA[0]]></param>
			<param name=""endDateTimestampOld""><![CDATA[1667043595]]></param>
			<param name=""forcedTeacher""><![CDATA[0]]></param>
			<param name=""forcedClass""><![CDATA[0]]></param>
			<param name=""forcedClassroom""><![CDATA[0]]></param>
			<param name=""assignmentTypeID""><![CDATA[1]]></param>
		</params>
	</command>
</request>";
            request.AddFormParameter("command", commandValue);

            IRestResponse response = client.Execute(request);
            Console.WriteLine(response.StatusCode);
            Console.WriteLine(response.Content); // 打印响应内容便于调试
            Console.ReadLine();
        }
    }
}

内容的提问来源于stack exchange,提问作者Roel Bellemans

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 13:25:25