未找到 Laravel API 路由

Posted

技术标签:

【中文标题】未找到 Laravel API 路由【英文标题】:Laravel API Routes Not Found 【发布时间】:2019-07-30 01:36:29 【问题描述】:

我是 API 和 Vue 的新手。 我正在研究 Laravel 5.8 api.php 以及控制器和视图,它只返回 404 Not Found。

这是我尝试过的

api.php

 Route::group(['middleware' => 'api'], function()
    Route::resource('/dashboard/departments', 'DepartmentsController');
 );

控制器

class DepartmentsController extends Controller
     
   public function index()
  
  return 'hey';
  

路线列表

 GET|HEAD  | api/dashboard/departments                   | departments.index   | App\Http\Controllers\DepartmentsController@index                       | api,auth  

我尝试通过/127.0.0.1:8000/api/dashboard/departments/127.0.0.1:8000/dashboard/departments 访问它,但两者都不起作用。

【问题讨论】:

Route::resource 只有一个路由? 请输入此命令(php artisan route:clear)然后再次运行服务器(php artisan serve) 还有更多路线,我只是显示索引并且我已经运行了路线:清除 是否显示根页面? 127.0.0.1:8000/ 是的根节目 【参考方案1】:

记住api.php 中声明的路由会自动连接到/api 前缀,顺便说一句:

Route::get('/hello', ...)
axios.get('/api/hello')

【讨论】:

加前缀的url也测试过了,所以我觉得这不是解决这个问题的办法。 问题就在那里。 "我尝试通过/127.0.0.1:8000/api/dashboard/departments 访问它"【参考方案2】:

您的 API 路由位于 api 中间件中,该中间件需要对 API 类型进行身份验证。如果您查看 API Authentication 文档,您需要设置 API 令牌并随请求一起传递。

您需要将令牌与您的请求一起传递,删除 api 中间件并让您的 API 路由未经身份验证,或者将您需要通过浏览器访问的路由移出 api 中间件并进入web 中间件和路由文件。

【讨论】:

你是对的。为了验证我的 API 是否工作的简单测试,即不实施任何身份验证,我遵循您的建议:我只是删除某些 API 路由的 api 中间件,以便它们未经身份验证。因此,我可以像这样通过 url 访问 API:localhost/mylaravelprojects/myjwtapp/public/api/user。这行得通。当然,在实际项目中,我需要使用 Passport 或简单的 JWT 来实现 Authentication。 很好的解释【参考方案3】:

只需在 api 之前的 url 中添加 public。

喜欢

/127.0.0.1:8000/public/api/dashboard/departments

【讨论】:

@jeesoon 显示您正在尝试的完整 URL。 我试过这个建议 /127.0.0.1:8000/public/api/dashboard/departments 和另外两个 /127.0.0.1:8000/api/dashboard/departments 和 /127.0.0.1:8000/仪表板/部门 在 api 前添加 public 关键字,比如这个 url----> /127.0.0.1:8000/public/api/dashboard/departments 他为什么要那样做?代码中的任何地方都没有指定“公共”前缀。 默认是laravel。【参考方案4】:

对于任何仍然想知道的人,或者只是我。 这是我经过多次试验后所做的。

我从我的 API.php 中删除了 route::group 并从 RouteServiceProvider.php 中删除了前缀('api') 并将其替换为 middleware('web')

这是我的 RouteServiceProvider.php 文件

protected function mapApiRoutes()

    Route::middleware('api')
        ->middleware('web')
        ->namespace($this->namespace)
        ->group(base_path('routes/api.php'));

这是我的 api.php 文件

Route::resource('/dashboard/departments', 'DepartmentsController');

【讨论】:

试试下面的怎么样?不要更改 RouteServiceProvider 的内容,因此您的路由仍然会有 API 前缀,以防您的其他 API 路由需要身份验证。仅将您的 api.php 文件更改为像您提到的那样,因此您的某些路线(例如 /dashboard/departments)未经过身份验证。然后你使用这个 url 访问 API:127.0.0.1:8000/public/api/dashboard/departments。它应该像我的一样工作。但如果没有,您可以恢复到上述解决方案。 这是什么意思?如果您不想要 API 前缀,只需将路由放入 web.php【参考方案5】:

要运行 laravel 项目“用你的替换主机”:

php artisan serve --host 10.11.222.33 --port 8000

或者也可以这样

php artisan serve --host 127.0.0.1 --port 8000

然后调用API

http://10.11.222.33:8000/api/departments

【讨论】:

【参考方案6】:

快跑

php artisan route:clear

【讨论】:

以上是关于未找到 Laravel API 路由的主要内容,如果未能解决你的问题,请参考以下文章

未找到 Laravel API 路由

404 - 未找到存在 Laravel 8 的 Passport Api 路由

Laravel RegisterController 路由未找到

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

未找到 Laravel 路由,默认根路由除外

Laravel 5.6 '/' 找到路由但未找到其他路由 AWS EC2