Refactor: action() methods throw ControllerExceptions rather than IOExceptions