c# – Download File Service

This is my code for download file process. The codes is working fine but would like some code review. Any comment will be appreciated especially on exception handling part. Should I just need one try catch at DownloadFileProcess method or every private method also need a try catch? And if private method also have try catch, is that the right way to throw it back to its parent so that it is testable?

This is IDownloadService.cs

public interface IDownloadService
{     
    Task DownloadFileProcess();    
}

This is DownloadController.cs

(HttpGet)
(Route("DownloadFile"))        
public IActionResult DownloadDowJonesFileList(string cronExpression = "0")
{
    try
    {
        if (cronExpression == "0")
        {
            BackgroundJob.Enqueue<IDownloadService>(x => x.DownloadFileProcess());
            return Ok("Background job started.");
        }

        RecurringJob.AddOrUpdate<IDownloadService>(x => x.DownloadFileProcess(), cronExpression, TimeZoneInfo.Local);
        string response = string.Format("Job update > cronExpression={0}", cronExpression);
        return Ok(response);
    }
    catch (Exception ex)
    {
        _logger.LogError(ex.Message);
        return Problem(ex.Message);
    }
}

This is DownloadService.cs

public async Task DownloadFileProcess()
{
    try
    {
        FileProcessLog fileToDownload = GetFileToDownload();

        if (fileToDownload == null) return;

        await DownloadFileToDirectory(fileToDownload);                
    }
    catch (Exception ex)
    {
        _logger.LogError(0, ex, ex.Message);
        throw new Exception(ex.Message);
    }
}

private FileProcessLog GetFileToDownload()
    => _myContext.FileProcessLogs
    .Where(d => d.FileStatus == FileStatus.NEW)
    .OrderBy(f => f.FileDate)
    .FirstOrDefault();

private async Task DownloadFileToDirectory(FileProcessLog fileProcessLog)
{
    await UpdateDownloadStatusDowloading(fileProcessLog);

    try
    {
        var downloadFileUrl = _webURL + fileProcessLog.FileName;
        var destinationFilePath = Path.GetFullPath(_downloadPath + fileProcessLog.FileName);

        using (var client = new HttpClientDownloadWithProgress(downloadFileUrl, destinationFilePath, _username, _password))
        {
            client.ProgressChanged += async (totalFileSize, totalBytesDownloaded, progressPercentage, fileName) =>
            {
                if (progressPercentage == 100)
                {
                    await UpdateDownloadStatusDownloaded(fileProcessLog, totalFileSize);
                    return; // process one file per request.
                }
            };

            await client.StartDownload();
        }
    }
    catch (Exception ex)
    {
        _logger.LogError(0, ex, ex.Message);
        await UpdateDownloadStatusError(fileProcessLog);
        throw ex;
    }
}

private async Task UpdateDownloadStatusError(FileProcessLog fileProcessLog)
{
    fileProcessLog.FileStatus = FileStatus.ERROR;
    fileProcessLog.UpdatedDate = DateTime.Now;
    await _myContext.SaveChangesAsync();

    _logger.LogInformation($"Downloaded {fileProcessLog.FileName} error status at {DateTime.Now}");
}

Some codes and method removed for brevity.