未找到 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 路由的主要内容,如果未能解决你的问题,请参考以下文章
404 - 未找到存在 Laravel 8 的 Passport Api 路由
Laravel RegisterController 路由未找到