API路由提供404错误:Laravel 5.3

时间:2017-02-01 04:22:49

标签: laravel laravel-5.3

我在godaddy服务器上测试我的api。但由于某些原因,路线无效并给出404错误

为了确保路线存在......我测试它就像使用下面的代码一样。

$routeCollection = \Route::getRoutes();

foreach ($routeCollection as $value) {
    echo $value->getPath();
}

你也可以在这里查看相同内容:http://pankajservers.in/当你输入用户名或密码中的任何内容时,当你看到控制台时...它会显示你的404 api错误,在本地它可以正常工作。

JQuery的

var data = {
    "EmailAddress": $("input[name='EmailAddress']").val(), 
    "Password":     $("input[name='Password']").val(),
    "_token":       "{{ csrf_token() }}"
};
$.ajax({
    method: "POST",
    url:    "{!! route('AuthenticateUser') !!}",
    cache:  false,
    async:  true,
    data:   data,
    success: function(result) {
        return false;
    },
    error: function(result) {
        return false;
    }
});

HTML

<form method="POST" action="http://pankajservers.in/api/v1/AuthenticateUser" 
    accept-charset="UTF-8" 
    id="loginForm">

    <input name="_token" type="hidden" value="GtSNw3bgzFO6jwi8IVFWnvymd2e8EqIXkAhPtPxb">

    <input class="form-control" name="EmailAddress" type="text">

    <input class="form-control" name="Password" type="password" value="">

    <button type="submit" class="btn btn-primary">

</form>

POST路线

Route::post('/AuthenticateUser', 
    array(
        'uses' =>  'API\UserManagement\Auth\Login\apiLoginController@AuthenticateUser', 
        'as'   =>  'AuthenticateUser'
    )
);

路线服务提供商

Route::group([
    'middleware' => 'api',
    'namespace' => $this->namespace,
    'prefix' => 'api/v1',
], function ($router) {
    require base_path('routes/API/UserManagement/Auth/Login/Login.php');
});

4 个答案:

答案 0 :(得分:3)

让我觉得你有重写问题。我尝试过你网站上的路线,但我在路线路径上加上/index.php。这引发了一个Laravel方法异常,当你访问一个仅限POST的路由时会出现这个异常。在这里,看看:

http://pankajservers.in/index.php/api/v1/AuthenticateUser

我不确定你是使用Nginx还是Apache,但我怀疑Nginx配置或Apache .htaccess是不是很正确。

修改

查看Laravel的安装文档。有一个关于重写配置的部分可能会给你一些见解:

https://laravel.com/docs/5.4/installation#web-server-configuration

答案 1 :(得分:3)

您可以通过将'prefix' => 'api/v1'更改为'prefix' => 'v1'

来实现 在api路线的网址中假定为laravel api.php中的

答案 2 :(得分:1)

在您的ajax请求中,所有API请求都必须以'/ api /'作为前缀。

<link href="https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min.css" rel="stylesheet"/>
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" rel="stylesheet"/>

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.js"></script>
<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.12.1/jquery-ui.js"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/js/bootstrap.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js"></script>


<ul class="nav nav-tabs">
  <li class="nav-item">
    <a class="nav-link active" href="#">Active</a>
  </li>
  <li class="nav-item dropdown">
    <a class="nav-link dropdown-toggle" data-toggle="dropdown" id="devDD" href="#" role="button" aria-haspopup="true" aria-expanded="false">Devices</a>
    <div class="dropdown-menu dropdown-menu-fixed-height" id="devDropdown">
      <input class="form-control form-control-sm" type="text" placeholder="Search..." id="devSearch" style="width:8rem; margin:0 1rem">
      <a class="dropdown-item" href="#">All Entires</a>
      <a class="dropdown-item" href="#">Big bob</a>
      <a class="dropdown-item" href="#">Little bob</a>
      <a class="dropdown-item" href="#">Sausage</a>
      <a class="dropdown-item" href="#">Chicken</a>
      <span class="filter-results no-results">Oops, nothing found!<span>
    </div>
  </li>
</ul>

答案 3 :(得分:0)

对我来说,在mysql中被调用的行不存在,因此结果是未找到404响应。