您可以通过在异步方法上调用.Result在HTTP POST中执行GET请求吗?

时间:2018-12-07 01:08:26

标签: c# python flask http-post http-get

我有一个调用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;
    }

1 个答案:

答案 0 :(得分:1)

这里的问题与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);
    // ...
}

通过这种方式,您的意图会更清晰,并且更容易解决问题。