您可以通过在异步方法上调用 .Result 来在 HTTP POST 中执行 GET 请求吗?
Can you do GET request inside HTTP POST by calling .Result on async method?
我有一个调用 API GET 请求和 return 布尔值的服务。
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");
}
然而,当我测试它时,在我点击触发 post 请求的登录后,我可以告诉 GET 在我的 flask api 中成功执行(它 returns 状态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;
}
此处的问题与 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);
// ...
}
这样你的意图会更清晰,也更容易把事情做好。
我有一个调用 API GET 请求和 return 布尔值的服务。
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");
}
然而,当我测试它时,在我点击触发 post 请求的登录后,我可以告诉 GET 在我的 flask api 中成功执行(它 returns 状态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;
}
此处的问题与 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);
// ...
}
这样你的意图会更清晰,也更容易把事情做好。