C# 通过调用异步方法上的.Result,可以在HTTP POST中获取请求吗?
我有一个调用API GET请求并返回布尔值的服务C# 通过调用异步方法上的.Result,可以在HTTP POST中获取请求吗?,c#,python,flask,http-post,http-get,C#,Python,Flask,Http Post,Http Get,我有一个调用API GET请求并返回布尔值的服务 Task<bool> LoginExist(string email, string password); 然而,当我测试它时,在我单击Login(它触发post请求)之后,我可以告诉您GET在我的flask api中成功执行(它返回状态200),但是,它从来不会转到上面代码中的IF语句或ELSE语句。相反,它只是一直在运行 我想知道我们是否可以使用GetinthePost,如果不行,有没有更好的方法 我在服务中添加了以下内容:
Task<bool> LoginExist(string email, string password);
然而,当我测试它时,在我单击Login(它触发post请求)之后,我可以告诉您GET在我的flask api中成功执行(它返回状态200),但是,它从来不会转到上面代码中的IF语句或ELSE语句。相反,它只是一直在运行
我想知道我们是否可以使用GetinthePost,如果不行,有没有更好的方法
我在服务中添加了以下内容:
public async Task<bool> LoginExist(string email, string password)
{
string url = string_url;
LoginVerification str = await url.WithHeaders(new { Accept = "application /json", User_Agent = "Flurl" }).GetJsonAsync<LoginVerification>();
return str.login_valid;
}
公共异步任务登录列表(字符串电子邮件、字符串密码)
{
字符串url=字符串\ url;
LoginVerification str=wait url.WithHeaders(new{Accept=“application/json”,User_Agent=“Flurl”}).GetJsonAsync();
返回str.login\u有效;
}
这里的问题与GET vs.POST无关。这就是如何使用异步方法。直接访问Result
属性不是获取异步任务结果的正确方法
将其更改为调用GetAwaiter
和GetResult
,如下所示:
bool login_result = _accountService.LoginExist(email, password).GetAwaiter().GetResult();
或者更好的方法是,使您的操作方法async
,并使用wait
关键字等待结果
[HttpPost]
public async Task<ActionResult> Login(string email, string password)
{
// ...
bool login_result = await _accountService.LoginExist(email, password);
// ...
}
[HttpPost]
公共异步任务登录(字符串电子邮件、字符串密码)
{
// ...
bool login\u result=wait\u accountService.LoginExist(电子邮件、密码);
// ...
}
通过这种方式,你的意图会更清晰,也更容易把事情做好。一个get就是一个get,一个POST就是一个POST。POST可以返回数据。你的问题是什么?@John所以我使用GET调用返回json字典的api,我需要知道这个json字典的值['login\u valid']。并将其视为布尔值(结果为true或false)。问题是,当我在HTTPPOST中调用这个布尔值时,它似乎不起作用。如果这是无法解决的,我不知道如何在controller中进行用户身份验证。我尝试了调用GetWaiter和GetResult的第一种方法,但它似乎不起作用。似乎如果我摆脱bool登录结果,它将开始正常工作…也许服务出了问题?谢谢你救了我一个晚上!第二种方法奏效了!
[HttpPost]
public async Task<ActionResult> Login(string email, string password)
{
// ...
bool login_result = await _accountService.LoginExist(email, password);
// ...
}