Standardizing Controller + Service method signatures
Just create a helper method for executing a query where you wrap the entire try/catch error handling and pass the query via a lambda expression:

private async Task&lt;T&gt; ExecuteAsyc&lt;T&gt;(Func&lt;DbContext, T&gt; query) 
{
    try
    {
        using (var db = new DbContext())
        {
            return query(db);
        }
    }
    catch (Exception e)
    {
        HandleServiceLayerException();
        return default(T);
    }
}


Then you call it like this with a lambda:

public async Task&lt;ApiResponseDto&gt; SubmitReportAsync(string username, string ReportDto report)
{
    return ExecuteAsyc(context =&gt; 
    {
        // this is where the unique stuff is
    }); 
}