【发布时间】:2021-11-03 16:43:59
【问题描述】:
我想使用 GetAsync 获取令牌,然后在 POST 函数中使用该令牌。 Get 和 Post 都应该在同一个会话中进行。
这里是 GET 函数:
var result = await SA_BaseUrl
.AppendPathSegments("ProdOrderConfSet")
.WithBasicAuth("UserName", "Password")
.WithHeader("Accept","application/json")
.WithHeader("X_CSRF_Token", "fetch")
.GetAsync();
IReadOnlyNameValueList<string> headers = result.Headers;
string X_CSRF_Token = headers.FirstOrDefault(h => h.Name == "x-csrf-token").Value;
和发布功能:
var result2 = await SA_BaseUrl
.AppendPathSegments("ProdOrderConfSet")
.WithBasicAuth("UserName", "Password")
.WithHeader("Accept","application/json")
.WithHeader("Content-Type", "application/json")
.WithHeader("X_CSRF_Token", X_CSRF_Token)
.PostJsonAsync(workStep)
.ReceiveJson<DANTESAP_ProdWorkStep>();
运行上面的代码,我得到:
403 Forbidden, CSRF token validation failed
如何在同一个会话中运行这两个函数?
很遗憾,没有关于我尝试访问的服务的文档。但是当我使用 Postman 时,它可以正常工作。我不知道我的 C# 代码中缺少什么(或错误)。
【问题讨论】:
-
你想在这里与什么服务交互?你能链接到他们的文档吗?没有它,这个问题就无法回答,因为 CSRF 令牌必须如何传输没有标准。