Laravel 路由在 API 中不起作用,返回 404 页

Posted

技术标签:

【中文标题】Laravel 路由在 API 中不起作用,返回 404 页【英文标题】:Laravel route is not working in API, returns page 404 【发布时间】:2019-04-02 06:22:31 【问题描述】:

在 routes/api.php 我有以下路由:

Route::post('/session/storeValue', 'HomeController@storeValue');

在控制器中我有 AJAX 功能:

<script>

        function noviArtikal() 

  var data =  name: 'User');

  $.ajaxSetup(
    headers: 
        'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
    
);

  $.ajax(
    type: "POST",
    url: '/session/storeValue',
    data: data,
    success: function() 
      console.log("Valueadded");
    
  );

        ;
</script>

但在发送 AJAX 调用时不断收到错误页面未找到。 我做错了什么?

【问题讨论】:

您的浏览器正在调用什么路由查看调试器控制台中的网络内选项卡 它正在调用localhost/session/storeValue 有重定向发生吗? 请看***.com/questions/39540236/… How to use API Routes in Laravel 5.3的可能重复 【参考方案1】:

只需像这样给路线起任何名字:

Route::post('/session/storeValue', 'HomeController@storeValue')-&gt;name('somename');

在您的 ajax 调用中,只需将 url 属性更改为: url: ' route('somename')',

Laravel 通过 RouteServiceProvider 自动将 /api 附加到 api 路由,发现是 /Providers 文件夹。

此外,您在进行 Api 调用时也不需要 csrf_token

【讨论】:

【参考方案2】:

因为它是 api.php,它会自动将 /api/ 添加到您的 URL。试试 /api/session/storeValue。

来自文档:

在 routes/api.php 文件中定义的路由嵌套在一个路由中 由 RouteServiceProvider 分组。在该组中,/api URI 前缀会自动应用,因此您无需手动应用 它到文件中的每条路线。您可以修改前缀和其他 通过修改您的 RouteServiceProvider 类来路由组选项。

编辑:

添加名称:

Route::post('/session/storeValue', 'HomeController@storeValue')-&gt;name('custom_name');

然后修改你的javascript

$.ajax( type: "POST", url: '/session/storeValue', data: data,

$.ajax( type: "POST", url: ' route('custom_name')', data: data,

编辑 2: 是的,不要发送 CSRF_TOKEN(检查@Yur Gasparyan 的答案)

【讨论】:

我试过了,但后来它调用 localhost/appname/public/api/session/storeValue 错误 404 你用过url: route('yourroutename') 吗? 我只是从按钮调用 onclick="noviArtikal()" 那么不要手动写url,而是通过路由函数。 laravel.com/docs/5.7/routing#named-routes 添加这里提到的名称。然后使用:url: route('yourroutename') 但我不确定在哪里调用它,因为我只是用 Ajax 调用调用 js 函数【参考方案3】:

首先,您不需要将CSRF_TOKEN 发送到api。检查CSRF-TOKEN 是没有意义的,因为它是一个api。另外要向 api 发送请求,您需要手动添加 api 前缀。

【讨论】:

如果我更改为 Route::post('api/session/storeValue', 'HomeController@storeValue');和 url: 'api/session/storeValue',如果你的意思是这样的话,我会调用 localhost/appname/public/api/session/storeValue。 您不需要将 `Route::post('session/storeValue', 'HomeController@storeValue')` 更改为 `Route::post('api/session/storeValue', 'HomeController@ storeValue'). You need to move your routes in routes/api.php`【参考方案4】:

将此代码添加到您的 route/web.php 中

Route::post('/session/storeValue', 'HomeController@storeValue');

【讨论】:

以上是关于Laravel 路由在 API 中不起作用,返回 404 页的主要内容,如果未能解决你的问题,请参考以下文章

为啥 Api Route 在 laravel 应用程序中不起作用,显示错误(未找到 404 错误)?

护照身份验证在 laravel 5.3 中不起作用

Laravel 根路由“/”在子域的前缀路由中不起作用

Laravel 5.0 路由模型绑定在销毁操作中不起作用

路由到子文件夹中的控制器在 Laravel 4 中不起作用

在虚拟主机中使用自定义端口的 Laravel 路由在 Apache 中不起作用