解决了Laravel网站在GET请求中返回 "错误404 "的问题。

问题描述 投票:0回答:1

所以我得到了一个Flutter应用的模板,它使用HTTP get请求从一个网站上检索其所有数据。

我有下面的方法,得到resturaunts的列表。

Future<Stream<Restaurant>> getNearRestaurants(LocationData myLocation, LocationData areaLocation) async {
  String _nearParams = '';
  String _orderLimitParam = '';
  if (myLocation != null && areaLocation != null) {
    _orderLimitParam = 'orderBy=area&limit=5';
    _nearParams = '&myLon=${myLocation.longitude}&myLat=${myLocation.latitude}&areaLon=${areaLocation.longitude}&areaLat=${areaLocation.latitude}';
  }
  final String url = '${GlobalConfiguration().getString('api_base_url')}restaurants?$_nearParams&$_orderLimitParam';
  final client = new http.Client();
  final streamedRest = await client.send(http.Request('get', Uri.parse(url)));

  return streamedRest.stream.transform(utf8.decoder).transform(json.decoder).map((data) => Helper.getData(data)).expand((data) => (data as List)).map((data) {
    return Restaurant.fromJSON(data);
  });
}

但是当我把模板的url变量换成我自己的网站时 应用程序就卡住了,然后... 溪流 返回一个错误的404页面。

尝试了解决方案。

  • 我用trycatch块包围它,它没有给我任何异常。
  • 我还安装了postman,并用GET语句检查了我的网站,我试图在上面发布的flutter代码中检索同样的餐馆列表,并看到了这个。Postman GET截图
  • 好像我的网站不能路由到API文件夹中的特定页面。但它们都在api.php中定义。

更新1.我的web.php是这样的

我的web.php是这样的 https:/pastebin.comQRG300uL. 这似乎与下面的建议相似

更新2:

我跑了 php artisan route::list 并显示所有的路由似乎都在那里。

|        | POST      | api/restaurant_reviews                                  | restaurant_reviews.store                 | App\Http\Controllers\API\RestaurantReviewAPIController@store                                   | api                                                  |
|        | GET|HEAD  | api/restaurant_reviews                                  | restaurant_reviews.index                 | App\Http\Controllers\API\RestaurantReviewAPIController@index                                   | api                                                  |
|        | GET|HEAD  | api/restaurant_reviews/create                           | restaurant_reviews.create                | App\Http\Controllers\API\RestaurantReviewAPIController@create                                  | api                                                  |
|        | DELETE    | api/restaurant_reviews/{restaurant_review}              | restaurant_reviews.destroy               | App\Http\Controllers\API\RestaurantReviewAPIController@destroy                                 | api                                                  |
|        | GET|HEAD  | api/restaurant_reviews/{restaurant_review}              | restaurant_reviews.show                  | App\Http\Controllers\API\RestaurantReviewAPIController@show                                    | api                                                  |
|        | PUT|PATCH | api/restaurant_reviews/{restaurant_review}              | restaurant_reviews.update                | App\Http\Controllers\API\RestaurantReviewAPIController@update                                  | api                                                  |
|        | GET|HEAD  | api/restaurant_reviews/{restaurant_review}/edit         | restaurant_reviews.edit                  | App\Http\Controllers\API\RestaurantReviewAPIController@edit                                    | api                                                  |
|        | GET|HEAD  | api/restaurants                                         | restaurants.index                        | App\Http\Controllers\API\RestaurantAPIController@index                                         | api                                                  |
|        | POST      | api/restaurants                                         | restaurants.store                        | App\Http\Controllers\API\RestaurantAPIController@store                                         | api                                                  |
|        | GET|HEAD  | api/restaurants/create                                  | restaurants.create                       | App\Http\Controllers\API\RestaurantAPIController@create                                        | api                                                  |
|        | GET|HEAD  | api/restaurants/{restaurant}                            | restaurants.show                         | App\Http\Controllers\API\RestaurantAPIController@show                                          | api                                                  |
|        | DELETE    | api/restaurants/{restaurant}                            | restaurants.destroy                      | App\Http\Controllers\API\RestaurantAPIController@destroy                                       | api                                                  |
|        | PUT|PATCH | api/restaurants/{restaurant}                            | restaurants.update                       | App\Http\Controllers\API\RestaurantAPIController@update                                        | api                                                  |
|        | GET|HEAD  | api/restaurants/{restaurant}/edit                       | restaurants.edit                         | App\Http\Controllers\API\RestaurantAPIController@edit                                          | api                                                  |
|        | POST      | api/send_reset_link_email                               |                                          | App\Http\Controllers\API\UserAPIController@sendResetLinkEmail                                  | api                                                  |
|        | GET|HEAD  | api/settings                                            |                                          | App\Http\Controllers\API\UserAPIController@settings                                            | api                                                  |

解决方法:

我改了很多东西之后,这个办法就奏效了 我把GET请求的网址从 "www.domain.comapiresturants "改成了 "www.domain.compublicapiresturants"

laravel routes
1个回答
0
投票

好吧,我不知道你的flutter代码,因为我使用不同的方法从api检索数据,但关于路线,我建议你像我这样做。

在web.php中,路由文件

//Api routes
Route::get('/company/api/fetch', 'ApiController@fetch_companies');

我的api控制器

public function fetch_companies()
{
    $companies = Companies::all();

    return response()->json($companies);
}

这样你就可以得到传递给路由companyapifetch的数据(你可以根据自己的需要进行修改),当进入这个页面的get请求时,它将回到 json

的请求处理。飘扬 我建议你把你的函数和类做得像在 文件

注意:我建议的扑动解决方案可能不适合您的情况,因为您使用的是 溪流 与这种类型的请求不同,因为这种类型的请求只运行一个,而Stream运行很多次,每次从服务器获得新的数据时,都会获得数据

© www.soinside.com 2019 - 2024. All rights reserved.