Standardizing Controller + Service method signatures In my controllers, I have the following: 

    [System.Web.Http.HttpPost]
    [Route("api/report")]
    public async Task&lt;HttpResponseMessage&gt; Report(ReportDto report)
    {
        await _profileService.SubmitReportAsync(User.Identity.Name, report);
        return Request.CreateResponse(HttpStatusCode.OK, true);
    }


Then in my service method (and in all service methods), I have the following: 

public async Task&lt;ApiResponseDto&gt; SubmitReportAsync(string username, string ReportDto report)
{
    try // repeated
    {
       using (var db = new DbContext()) // repeated
       {
         // this is where the unique stuff is
       }   
    }
    catch(Exception e){ // repeated
       HandleServiceLayerException();
    } 
 }


My issue is that I'm repeating so much "signature" code in my service methods.  How can I simplify, keeping in mind that service methods have varying parameter 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
    }); 
}