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

.NET Framework下ASP.NET调用SAP Business Layer API会话超时问题求助

问题排查与修复方案

核心问题分析

你的代码存在几个关键错误,导致会话无法正确传递——SAP Business Layer完全支持ASP.NET,问题出在代码实现上:

  • 重复执行登录请求,生成了新的会话,后续用的是这个新会话的ID,但Cookie却取的是第一次请求的ROUTEID,两者不匹配
  • 手动解析会话ID的方式极不稳定,容易因响应格式变化失效
  • 没有复用Cookie容器,手动拼接Cookie头可能遗漏SAP要求的Cookie属性(比如SameSite、Domain等)

修复后的代码

' 初始化带Cookie容器的RestClient,确保会话保持
Dim clientOptions = New RestClientOptions("https://10.0.3.15:50000/b1s/v1/") With {
    .CookieContainer = New System.Net.CookieContainer()
}
Dim client As New RestSharp.RestClient(clientOptions)

' 登录请求
Dim loginRequest = New RestSharp.RestRequest("Login", RestSharp.Method.POST)
loginRequest.AddHeader("Content-Type", "application/json")
' 直接用对象序列化,避免手动拼接JSON出错
Dim loginBody = New With {
    .CompanyDB = "SBO_ROCHESTER_GOLIVE",
    .Password = "ABC123",
    .UserName = "manager"
}
loginRequest.AddJsonBody(loginBody)
Dim loginResponse As RestResponse = client.Execute(loginRequest)
Writelog(loginResponse.Content)

' 正确解析SessionId,直接从响应JSON中获取
If loginResponse.IsSuccessStatusCode Then
    Dim loginResult = Newtonsoft.Json.JsonConvert.DeserializeObject(Of Dictionary(Of String, String))(loginResponse.Content)
    Dim sessionId = loginResult("SessionId")
    Writelog($"获取到SessionId: {sessionId}")

    ' 请求BusinessPartners,复用同一个client,自动传递Cookie
    Dim bpRequest = New RestSharp.RestRequest("BusinessPartners", RestSharp.Method.GET)
    Dim bpResponse = client.Execute(bpRequest)
    Writelog(bpResponse.Content)
Else
    Writelog($"登录失败: {loginResponse.Content}")
End If

关键修复点

  • 使用CookieContainer让RestSharp自动管理会话Cookie,无需手动拼接Cookie头,避免属性遗漏
  • 移除重复的登录请求,确保会话ID和Cookie来自同一次登录
  • 使用字典解析响应的SessionId,替代脆弱的Split操作
  • 复用同一个RestClient实例,确保会话上下文一致

额外注意事项

  • 检查ASP.NET应用的信任级别,确保允许跨域Cookie传递(如果SAP服务器和Web应用不在同一域)
  • 确认RestSharp版本为最新稳定版,旧版本可能存在Cookie处理bug
  • 可以启用RestSharp的日志功能,查看实际发送的请求头,对比Postman的请求差异

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 00:59:57