您可以通过在异步方法上调用 .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 属性 不是获取异步任务结果的正确方法。

要么将其更改为调用 GetAwaiterGetResult,如下所示:

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);
    // ...
}

这样你的意图会更清晰,也更容易把事情做好。