Why does RestSharp hang waiting for a response

Viewed 213

I recently upgraded RestSharp to version 107.3.0. I had to modify my request some, but the Web API gets the request and returns, but it hangs there waiting for the response...

private async Task<bool> AuthenticateUser(string username, string password)
{
    var encryption = new Encryption64();

    var encrypt = encryption.Encrypt(password, _key);

    var client = new RestClient(UserSettings.URL);

    var uri = $"users/authenticate/{username}/";

    var pass = new PasswordDTO
    {
        Password = encrypt
    };

    var request = new RestRequest(uri)
        .AddJsonBody(pass);

    //var json = JsonConvert.SerializeObject(pass);

    //request.AddParameter("application/json; charset=utf-8", json, ParameterType.RequestBody);

    var response = await client.PostAsync<bool>(request);

    return response;
}

The line await client.PostAsync<bool>(request) never completes. No errors in the Debug window either. This worked before I upgraded. What am I doing wrong?

1 Answers

I am not sure if this is entirely correct... but I fiddled with it until I got it working.

private bool AuthenticateUser(string username, string password)
{    
    using (var client = new RestClient(UserSettings.URL))
    {
        var encryption = new Encryption64();

        var encrypt = encryption.Encrypt(password, _key);

        var uri = $"users/authenticate/{username}/";

        var pass = new PasswordDTO
        {
            Password = encrypt
        };

        var request = new RestRequest(uri)
            .AddJsonBody(pass);

        var response = client.PostAsync<bool>(request).Result;

        return response;
    }
}

UPDATE

private async Task<bool> AuthenticateUser(string username, string password)
{    
    using (var client = new RestClient(UserSettings.URL))
    {
        var encryption = new Encryption64();

        var encrypt = encryption.Encrypt(password, _key);

        var uri = $"users/authenticate/{username}/";

        var pass = new PasswordDTO
        {
            Password = encrypt
        };

        var request = new RestRequest(uri)
            .AddJsonBody(pass);

        var response = await client.PostAsync<bool>(request);

        return response;
    }
}
public async Task<bool> AuthenticateUserAsync([FromUri] string username, [FromBody] PasswordDTO pass)
{
    Log.Logger.ForContext<UserController>().Information("{User} is Logging In", username);
    using (var context = new DatabaseContext())
    {
        var user = await context.bma_users
            .AsNoTracking()
            .FirstOrDefaultAsync(p => p.username == username);

        if (user is null)
            return false;

        return (user.password == pass.Password);
    }
}

I still welcome any ideas for improvement.

Related