我有一个调用API GET请求并返回布尔值的服务。
Task<bool> LoginExist(string email, string password);
在控制器中,我有以下代码:
[HttpPost]
public ActionResult Login(string email, string password)
{
System.Diagnostics.Debug.WriteLine("here");
bool login_result = _accountService.LoginExist(email, password).Result;
System.Diagnostics.Debug.WriteLine(login_result);
if (login_result)
{
FormsAuthentication.SetAuthCookie(email, false);
return Redirect(Request.UrlReferrer.ToString());
}
else
{ Redirect("Register"); }
return Redirect("Register");
}
但是,当我对其进行测试时,单击“登录”(触发发布请求)后,我可以告诉GET在我的flask api中成功执行了(返回状态200),但是它从未进入IF语句或ELSE语句在上面的代码中。相反,它只是继续运行...
我想知道我们是否可以在POST中使用GET,如果不能,是否有人有更好的方法来解决这个问题?
我添加了服务内容:
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;
}
答案 0 :(得分:1)
这里的问题与GET与POST无关。这就是您使用异步方法的方式。直接访问Result
属性不是获取异步任务结果的正确方法。
可以将其更改为分别调用GetAwaiter
和GetResult
:
bool login_result = _accountService.LoginExist(email, password).GetAwaiter().GetResult();
或者更好的方法是,将操作方法设为async
,然后使用await
关键字等待结果。
[HttpPost]
public async Task<ActionResult> Login(string email, string password)
{
// ...
bool login_result = await _accountService.LoginExist(email, password);
// ...
}
通过这种方式,您的意图会更清晰,并且更容易解决问题。