public function beforeAction($action)
 {
     if ($this->isActionAttachedByActionsMethod($action) || $this->isSpecialAction($action)) {
         return parent::beforeAction($action);
     }
     try {
         $requestModel = $this->createApiValidation($this->getId(), $action->id);
         $postParamsKey = self::$configuration['requestKey'];
         if (empty($this->request)) {
             $this->request = isset($_POST[$postParamsKey]) ? $_POST[$postParamsKey] : file_get_contents('php://input');
         }
         Request::setModel($requestModel);
         Request::setRawRequest($this->request);
         if (Request::validate()) {
             return parent::beforeAction($action);
         } else {
             Response::error(ErrorCodes::VALIDATION_ERROR, Request::model()->getErrors());
             $this->afterAction($action);
         }
     } catch (Exception $e) {
         if ($e instanceof CHttpException) {
             throw $e;
         }
         $trace = YII_DEBUG ? ' Trace: ' . $e->getTraceAsString() : '';
         Response::error(ErrorCodes::SERVER_ERROR, $e->getMessage() . $trace);
         $this->renderAndLogResponse();
     }
 }