Laravel 在 API Post 上路由总是 404
Laravel Routing Always 404 on API Post
我在 Windows 中的 Laravel 5.8 尝试创建入站 API 路由。当我尝试走这条路线时,邮递员总是给我一个 404:
http://MYHOSTISHERE/api/v1?event=NewDealerSetUp&api_key=MYKEYISHERE
CURL 与
curl -X POST "http://rx-0-unicorn.local/api/v1?event=NewDealerSetUp&api_key=MYAPIKEYHERE"
也给了我一个 404。
有人可以指出我做错了什么吗?我秃头了,但我可能会在一分钟内开始拔胡子。
详情如下,谢谢!
我在 app.php 中有这条路线:
Route::post('v1?event={event}&api_key={api_key}', 'API\APIController@index');
路由显示在artisan路由列表中:
| | POST | api/v1?event={event}&api_key={api_key} | | App\Http\Controllers\API\APIController@index | api |
VerifyCsrfToken 中间件(只是为了看看它是否有效):
protected $except = [
'api/*'
];
控制器启动:
namespace App\Http\Controllers\API;
use App\Models\Log\LogAPI;
use App\Models\Members;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\Redirect;
class APIController extends Controller
{
public function index($event, $api_key, Request $request)
{
$data = filter_var_array((array)$request, FILTER_SANITIZE_SPECIAL_CHARS);
[...]
if($event == 'NewDealerSetUp'){
$setup = new NewDealerSetup();
return $setup->newDealerSetup($request);
}
.htaccess
<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
Options -MultiViews -Indexes
</IfModule>
RewriteEngine On
# Handle Authorization Header
RewriteCond %{HTTP:Authorization} .
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
# Redirect Trailing Slashes If Not A Folder...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} (.+)/$
RewriteRule ^ %1 [L,R=301]
# Handle Front Controller...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
# ------------------------------------------------------------------------------------------------------
# NOTES:
# the log: strip per-dir prefix: C:/apache/htdocs/MYAPPNAME/public/ ->[EMPTY] ... takes the ^[EMPTY] and returns an empty
# ------------------------------------------------------------------------------------------------------
</IfModule>
你的路线定义是这里的问题。您在路由定义 v1?event={event}&api_key={api_key}
中使用了错误的查询参数。我不确定,但我以前从未见过像这样的路由定义,因为在路由定义中,我们通常只定义端点而不提供任何查询参数
你的控制器定义是
public function index($event, $api_key, Request $request)
为此,您的路线需要类似于
Route::post('v1/{event}/{api_key}', 'API\APIController@index');
或类似的东西
Route::post('v1/event/{event}/api_key/{api_key}', 'API\APIController@index');
如果您必须使用查询参数,那么您将不得不使用
Route::post('v1', 'API\APIController@index');
并在你的控制器中处理参数
public function index(Request $request)
{
$event = $request->event;
$api_key = $request->api_key;
// Rest of code
}
我在 Windows 中的 Laravel 5.8 尝试创建入站 API 路由。当我尝试走这条路线时,邮递员总是给我一个 404:
http://MYHOSTISHERE/api/v1?event=NewDealerSetUp&api_key=MYKEYISHERE
CURL 与
curl -X POST "http://rx-0-unicorn.local/api/v1?event=NewDealerSetUp&api_key=MYAPIKEYHERE"
也给了我一个 404。
有人可以指出我做错了什么吗?我秃头了,但我可能会在一分钟内开始拔胡子。
详情如下,谢谢!
我在 app.php 中有这条路线:
Route::post('v1?event={event}&api_key={api_key}', 'API\APIController@index');
路由显示在artisan路由列表中:
| | POST | api/v1?event={event}&api_key={api_key} | | App\Http\Controllers\API\APIController@index | api |
VerifyCsrfToken 中间件(只是为了看看它是否有效):
protected $except = [
'api/*'
];
控制器启动:
namespace App\Http\Controllers\API;
use App\Models\Log\LogAPI;
use App\Models\Members;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\Redirect;
class APIController extends Controller
{
public function index($event, $api_key, Request $request)
{
$data = filter_var_array((array)$request, FILTER_SANITIZE_SPECIAL_CHARS);
[...]
if($event == 'NewDealerSetUp'){
$setup = new NewDealerSetup();
return $setup->newDealerSetup($request);
}
.htaccess
<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
Options -MultiViews -Indexes
</IfModule>
RewriteEngine On
# Handle Authorization Header
RewriteCond %{HTTP:Authorization} .
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
# Redirect Trailing Slashes If Not A Folder...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} (.+)/$
RewriteRule ^ %1 [L,R=301]
# Handle Front Controller...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
# ------------------------------------------------------------------------------------------------------
# NOTES:
# the log: strip per-dir prefix: C:/apache/htdocs/MYAPPNAME/public/ ->[EMPTY] ... takes the ^[EMPTY] and returns an empty
# ------------------------------------------------------------------------------------------------------
</IfModule>
你的路线定义是这里的问题。您在路由定义 v1?event={event}&api_key={api_key}
中使用了错误的查询参数。我不确定,但我以前从未见过像这样的路由定义,因为在路由定义中,我们通常只定义端点而不提供任何查询参数
你的控制器定义是
public function index($event, $api_key, Request $request)
为此,您的路线需要类似于
Route::post('v1/{event}/{api_key}', 'API\APIController@index');
或类似的东西
Route::post('v1/event/{event}/api_key/{api_key}', 'API\APIController@index');
如果您必须使用查询参数,那么您将不得不使用
Route::post('v1', 'API\APIController@index');
并在你的控制器中处理参数
public function index(Request $request)
{
$event = $request->event;
$api_key = $request->api_key;
// Rest of code
}