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')->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')->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 页的主要内容,如果未能解决你的问题,请参考以下文章