Many of our current controllers look like this:
[HttpPost]
public List<Foo> Post([FromBody]Bar model)
{
    if (model == null)
    {
        throw new ArgumentNullException();
    }
    try
    {
        // business logic
    }
    catch (Exception ex)
    {
        // logging
    }
    return dto;
}
A lot of code is being repeated here though.  What I'd like to do is implement a base controller that handles exceptions so I can return a standardized response with fields like Payload, Success, Error, etc.  
Prior to .net core this was possible by providing an override of OnException however this doesn't appear to work with a .net core api controller.  How do I go about consolidating this exception logic to return a custom response when things go awry in my controller bodies?
I'd like this, as a starting point:
[HttpPost]
public StandardFoo Post([FromBody]Bar model)
{
    if (model == null)
    {
        throw new ArgumentNullException();
    }
    // business logic
    return new StandardFoo(){Payload: dto};
}
Where exceptions thrown by model validation or business logic bubble up to some piece of logic that returns a new StandardFoo with a property containing the exception details.