【问题标题】:How to make CURL call from CMD line (Win 7) to MVC action with parameter?如何使用参数从 COMMAND 行(Win 7)对 MVC 操作进行 CURL 调用?
【发布时间】:2015-09-22 19:31:42
【问题描述】:

我正在 Yii 2.0 中使用 CRUD 操作构建 REST-full API,我需要更新操作的帮助。

在我的 Yii 2.0 MVC 控制器中,我创建和更新了如下操作:

public function actionCreate()
{
    ...
}

对于创建操作,我可以使用以下命令成功调用 CURL

curl -X POST -d column_one=create_test1 -d column_two=create_test2 http://localhost/MyApp/web/tabletest/create

在此调用之后,我的表中具有上述列值的新行已成功创建。

现在我还需要发出 CURL 调用更新操作:

public function actionUpdate($id)
{
    ...
}

我已经为这个命令尝试了很多变体(现在我们在函数中有参数,我不知道如何传递它 - 让我们假设 $id=2)。这些只是我尝试过的几个,没有一个有效

curl -X PUT -d column_two=updated_cmd_2 http://localhost/MyApp/web/tabletest/update/2

curl -X PUT -d "column_two=updated_cmd_2" "http://localhost/MyApp/web/tabletest/update/2"

curl -X PUT -d "id=2&column_two=updated_cmd_2" "http://localhost/MyApp/web/tabletest/update"

但在大多数情况下,我得到了错误:

Bad Request (#400)

*注意:create 方法定义为 POST 方法,update 方法定义为 PUT 方法,所以在这种情况下方法类型不是问题。 我认为更新 CURL 调用的格式不正确

【问题讨论】:

    标签: api rest curl yii2 updatemodel


    【解决方案1】:

    我通过替换控制器中的一个自定义操作解决了这个问题:

    public function beforeAction($action) 
    {
        if($this->action->id == 'create'){
            $this->enableCsrfValidation = false;
        }
    
        return parent::beforeAction($action);
    }
    

    进入:

    public function beforeAction($action) 
    {
        if($this->action->id == 'create' || $this->action->id == 'update'){
            $this->enableCsrfValidation = false;
        }
    
        return parent::beforeAction($action);
    }
    

    现在:

    curl -X PUT -d column_two=updated_cmd_2 http://localhost/MyApp/web/tabletest/update/2
    

    正在工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-11-18
      • 1970-01-01
      • 2022-06-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多