ily*_*rol 1 c# asp.net-core-3.1
我正在尝试存储从会话中的外部 api 获取的令牌。
与此相关的代码片段;
[HttpPost]
public async void Post()
{
if (HttpContext.Session.GetValue<User>("Token") == null)
{
HttpContext.Session.SetValue("Token", "test");
var res = await _loginBusiness.GetToken();
HttpContext.Session.SetValue("Token", res);
}
}
Run Code Online (Sandbox Code Playgroud)
HttpContext.Session.SetValue("令牌", "测试");
在此部分中,它不会发生任何错误,但第二个相同的代码行在 GetToken() 之后给出错误。
相关错误
System.ObjectDisposeException:'IFeatureCollection 已被释放。对象名称:“集合”。
还有 GetToken():
public async Task<User> GetToken()
{
String url = "login/login";
var client = httpClientFactory.CreateClient("VoiceScope");
var postRes = await client.PostAsync<User>(new UserLogin(), url);
return postRes;
}
Run Code Online (Sandbox Code Playgroud)
问题是你正在使用async void. 这些承诺无法被遵守,而且它们的语义最终与正常的Task. 您的处理很早就发生了,因为基础设施只是假设您的Post方法已经完成(它无法告诉其他情况)。
将 的签名更改Post为:
public async Task Post()
Run Code Online (Sandbox Code Playgroud)
请注意,async void应仅限于事件处理程序。
| 归档时间: |
|
| 查看次数: |
2342 次 |
| 最近记录: |