it-swarm.com.de

Laravel 5.2 POST Anforderung gibt immer "405 Methode nicht zulässig" zurück

Also entwickle ich eine API mit Laravel 5.2 und ich stehe vor einem wichtigen Problem.

Ich habe einen UserController, der die Benutzer meiner App verwaltet.

Dies ist meine Datei routes.php:

Route::group(array('prefix' => 'api/v1'), function() {    
   Route::post('user', '[email protected]');
});

Und ich habe meinen UserController so definiert:

class UserController extends Controller {

   public function index() {
       return 'Hello, API';
   }

   public function create(){
   }

   public function store(Request $request) {
       $user = new User;
       $user->email = $request->email;
       $user->password = $request->password;
       $user->fbId = $request->fbId;
       $user->ggId = $request->ggId;
       $user->firstName = $request->firstName;
       $user->lastName = $request->lastName;
       $user->imageUrl = $request->imageUrl;
       $user->country = $request->country;
       $user->mobile = $request->mobile;
       $user->gender = $request->gender;
       $user->client = $request->client;

       $user->save();

       return Response::json(array(
           'error' => false,
           'userId' => $user->id),
           200
       );
   }

   public function update(Request $request, $id) {
   }
}

Und das ist die Ausgabe von php artisan route:list

+--------+--------+-------------+------+-------------------------------------------+------------+
| Domain | Method | URI         | Name | Action                                    | Middleware |
+--------+--------+-------------+------+-------------------------------------------+------------+
|        | POST   | api/v1/user |      | App\Http\Controllers\[email protected] | web        |
+--------+--------+-------------+------+-------------------------------------------+------------+

Ich verwende Postman, um meine POST-Anforderungen zu testen. Jedes Mal, wenn ich eine POST -Anforderung an/api/v1/Benutzer absende, erhalte ich die Fehlermeldung "405 Methode nicht zulässig".

Habe ich etwas vergessen? 

Gibt es etwas, was ich tun sollte, um dieses Problem zu beheben?

3

Ich habe das gleiche Problem mit Ihnen, das ich bereits in meiner POST -Route zum Beispiel "/ api/v1/user" eingestellt habe.

und wenn ich versuche, eine Verbindung mit POSTMAN (Application-to-Test-API) herzustellen, wird die 405-Methode nicht zulässig zurückgegeben. 

und dann wird mir klar, dass die URL, die ich gesendet habe, verwendet wird.http'und nachdem ich es geändert habe'https'(mit dem' s 'auf der Rückseite) 
dann funktioniert meine API wie gewohnt!

normalerweise, wenn wir mit anderen Servern interagieren, müssen wir 'verwendenhttps
aber wenn Ihre Anwendung auf dem gleichen Server, 
es ist in Ordnung zu verwenden 'http'

Der wahre Grund für meinen Fall ist, dass jede Interaktion mit einem anderen Server verwendet werden muss. 'https'(Dies ist das Setup auf meinem Server)

10
bathulah mahir

Sie müssen Ihre Routen voneinander trennen, da alle Benutzer, die versuchen, Ihre Routen aufzurufen, eine offene Sitzung benötigen (angemeldet sind).

Versuche dies

Route::group(array('prefix' => 'api/v1'), function() {

    Route::post('/','[email protected]');

    Route::get('/', '[email protected]');

    Route::group(array('before' => 'auth.basic'), function() {

        Route::post('{user}', '[email protected]');

    });
});

Die Routen Ihrer autorisierten Benutzer sollten sich in der zweiten Gruppe befinden

Ihre nicht zugelassene 405-Methode ist $user->id für $request->user()->id.

6

Wenn Sie zu https wechseln, funktioniert es. Zumindest habe ich das erlebt. Die Verwendung von POSTman mit http hat immer diesen Effekt.

0
anabeto93

Konfrontiert mit einem ähnlichen Problem, stellte sich nach dem Debuggen heraus, dass es ein Postman-Problem und nichts mit dem Code zu tun hat!

Also öffne dein Terminal und versuche die gleiche Anfrage mit curl:

curl -X POST -H "Accept: application/json" -F "[email protected]" -F "password=secret" -F "firstName=Mahmoud"  -F "lastName=Zalt" ....... "http://your-domain.com/api/v1/user"

Wenn dies funktioniert hat, müssen Sie einige Einstellungen mit Postman selbst ändern. Ich kann mich wirklich nicht erinnern, was ich damit gemacht habe! Es ist jedoch so einfach, einige Standardheader zu ändern oder den Autorisierungstyp zu entfernen ...

0
Mahmoud Zalt

Wenn es jemandem hilft, hatte ich genau dasselbe Problem. Aus irgendeinem Grund wurde es durch eine Kombination von Dingen behoben.

  1. Der offensichtliche Punkt war, dass es einen NotFoundHttpException in RouteCollection.php line 161 zurückgeben würde, weil ich mein "api_token" in meiner Post-Anfrage nicht gesendet habe.
  2. Aus irgendeinem Grund (ich weiß nicht, ob das einen Unterschied gemacht hat), aber die Verkettung meiner Middleware funktionierte, anstatt sie in die Route zu setzen: Gruppe, die ich gemacht habe;

    Route::group(['prefix'=>'api/v1'], function () {
        Route::post('/', '[email protected]')->middleware('auth:api');
    });
    
0
Robert Pounder

Nach stundenlangem Graben und Graben konnte ich keine Lösung für mein Problem finden.

Ich musste ein neues Laravel-Projekt erstellen und alles hinzufügen, was ich in meinem alten Projekt hatte. Zu meiner Überraschung funktionierte alles perfekt und ich verstehe immer noch nicht warum!

Wie auch immer, danke an alle, die versucht haben, hier zu helfen :) Prost!

0

Dieser Fehler kann auch durch einen zu großen Anfragetext verursacht werden. In meinem Fall habe ich versehentlich ein Objekt mit vielen Unterobjekten gesendet, die alle viele andere Unterobjekte hatten. Durch das Beschneiden meiner Anfragedaten wurde das Problem behoben.

0
mopo922