2017-09-04 6 views
0

안녕 얘들 아, 나는 평온한 API를 만들고있어, 항상 컨텐트 유형 응용 프로그램/json으로 헤더를 설정하는 미들웨어를 만들기로 결심했다. 그러나 문제는 결코 그렇게하지 않는다는 것이다.json 미들웨어 시행

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

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

    return $response; 
    } 

} 

심지어 난 아직 얻는 경로에 대한 web.php의 미들웨어를 설정 한 후 : 우편 배달부의 요구는 여전히 콘텐츠 형식 여기에 명확하게하기 위해 .. 미들웨어에도 불구하고 text/html과 내 미들웨어 말한다 이 우편 배달부에서 postman's result

답변

1

에서 Content-Type: applicaton/json 헤더를 설정할 필요가 없습니다.. 당신이 json 응답을 보내면 Laravel이 그것을 설정할 것입니다.

이 기능을 사용할 수있는 경우

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

편집 :

내 생각 엔이이 질문에 How to set header for all requests in route group

의 허용 대답에서 알 겠어요 당신이

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

     return $next($request); 
    } 
} 

를 찾고 있습니다입니다

+0

내가 이미 알고 : 미들웨어는 미들웨어가 작동되어 있는지 확인하려면

는 요청을 수신 컨트롤러에서 요청 헤더를 덤프 시도 ...가 수신 된 후 요청에서 작동 하지만 내가/api/login으로 가면 우편함에 Accept : application/json 헤더를 특별히 설정하지 않으면 작동하지 않을 것입니다 : O. 헤더를 그렇게 설정하지 않으면 404를 반환합니다 .. –

+0

그런 다음 미들웨어에서 응답하지 않기 위해'accept : appliation/json' 헤더를 설정하십시오. – Ragas

+0

컨트롤러 메서드를 통해 설정하면 작동하지만 여기서는 요청이 $ request에 전달 된 경우 작동합니다. 폼 요청 LoginRequest가 아닌 요청입니다. 내 로그인 양식 요청과 함께 작동시킬 수있는 방법이 있습니까? –

0

우체부 사람이 너에게 머리를 보여줄거야 을 보내고 미들웨어가 수정 한 후에는 헤더가 아닙니다.

return ($request->header());