【问题标题】:Laravel validation throwing "NotFoundHttpException" when used in PostMan but works in Angular $http requestLaravel 验证在 PostMan 中使用时抛出“NotFoundHttpException”,但在 Angular $http 请求中有效
【发布时间】:2016-05-07 20:46:12
【问题描述】:

我正在创建 API,但调试卡住了。

在我的控制器方法中使用它:

$this->validate($request, [
    'project_id' => 'required',
    'content'    => 'required',
]);

如果我使用 PostMan 调用该路由,Laravel 的调试屏幕会返回未找到的错误。

但是,当使用 Angular(离子)$http 请求时,API 调用可以正常工作。

有什么帮助吗?

【问题讨论】:

  • 请添加更多信息。你的角码是什么样的?你的路线是什么样的?
  • 它使用 Postman 导致了上述问题。如果我在 Angular 和 Postman 中请求相同的 URL,则只有在使用验证时才会导致该响应。
  • 您没有提供足够的信息。您的 routes.php 文件中的路由与 postman 和 angular 中调用的 url 相比是什么样的。

标签: angularjs laravel-5 ionic-framework


【解决方案1】:

https://laravel.com/docs/5.1/validation#form-request-validation
如果验证失败,将生成重定向响应以将用户发送回之前的位置。错误也将闪现到会话中,以便显示。如果请求是 AJAX 请求,将向用户返回带有 422 状态代码的 HTTP 响应,其中包括验证错误的 JSON 表示。

从 FormRequest 签出代码

public function response(array $errors)
{
    if ($this->ajax() || $this->wantsJson()) {
        return new JsonResponse($errors, 422);
    }

    return $this->redirector->to($this->getRedirectUrl())
                                    ->withInput($this->except($this->dontFlash))
                                    ->withErrors($errors, $this->errorBag);
}

当你使用 Angular 时,Laravel 知道你正在发送 ajax 请求。使用 Postman 时,Laravel 认为这是一个表单请求,并将您重定向到上一个页面 404。解决方案是在 postman 请求中添加标题 Accept: application/json,以便 Laravel 知道您 wantsJson()X-Requested-With: XMLHttpRequest 所以 Laravel 认为它是ajax() 请求。

【讨论】:

    【解决方案2】:

    你可以试试下面的

    $validator = \Validator::make($request->all(), [
       'project_id' => 'required',
       'content'    => 'required',
        ]);
    
    if($validator->fails()){
      return 'Validation error';
    }
    else{
     return 'No error';
     }
    

    【讨论】:

      猜你喜欢
      • 2019-11-28
      • 1970-01-01
      • 2019-11-11
      • 2020-04-20
      • 2018-08-29
      • 2018-07-14
      • 1970-01-01
      • 2023-03-19
      • 1970-01-01
      相关资源
      最近更新 更多