2017-09-04 1 views
0

Hey Leute, ich mache eine erholsame API und ich beschloss, eine Middleware, die immer den Header als Content-Type-Anwendung/JSON setzt aber das Problem ist, dass es nie das .. wenn ich die Anfrage in Postbote sagt es immer noch der Content-Type text/html trotz der Middleware ist .. klarer zu sein, hier ist meine Middleware:Erzwingen JSon Middleware

class EnforceJSON 
{ 
    public function handle($request, Closure $next) 
    { 
    $response = $next($request); 

    $response->headers->set('Content-Type', 'application/json'); 

    return $response; 
    } 

} 

und auch nach der Middleware in web.php für die Routen Einstellung i noch erhalten dies im Postboten postman's result

Antwort

1

Sie müssen nicht Content-Type: applicaton/json Header von einemfestlegen. Laravel wird es für Sie einstellen, wenn Sie eine JSON-Antwort senden.

Wenn dieser Funktion können

return response()->json($response_data, 200); 

EDIT:

Meine Vermutung ist, das ist, was Sie suchen

class JsonHeader 
{ 
    public function handle($request, Closure $next) 
    { 
     $acceptHeader = $request->header('Accept'); 
     if ($acceptHeader != 'application/json') { 
      return response()->json([], 400); 
     } 

     return $next($request); 
    } 
} 

Verstanden aus akzeptierte Antwort auf diese Frage How to set header for all requests in route group

+0

Ich weiß schon, dass aber wenn ich zu meinem/api/login gehe, wird es nicht funktionieren, wenn ich nicht ausdrücklich einen Accept: application/json header im postman: O. Es wird ein 404 zurückgegeben, wenn ich den Header nicht so festlege. –

+0

Dann setze 'accept: appliation/json'-Header, um eine Antwort in der Middleware zu verlangen. – Ragas

+0

es funktioniert, wenn ich es durch die Controller-Methode setzen, aber hier ist die Sache, die es nur funktioniert, wenn ich in $ Anfrage mit Anfrage nicht mit meiner Formularanforderung LoginRequest übergeben. Gibt es einen Weg, wie ich es mit meiner Anfrage für ein Anmeldeformular arbeiten lassen kann? –

0

Postbote zeigt die Header, die Sie senden Sie, nicht die Header, nachdem Ihre Middleware sie geändert hat. Die Middleware arbeitet auf einer Anfrage nach dem Empfang ...

Wenn Sie Ihre Middleware überprüfen möchten funktioniert, versuchen Sie, die Request-Header von der Steuerung Dumping, der die Anforderung empfängt:

return ($request->header()); 
Verwandte Themen