2012-09-20 19 views
8

Non sono sicuro se ciò sia possibile o abbia senso, ma sto cercando di effettuare un reindirizzamento dopo aver impostato un campo di intestazione HTTP. Qualcosa di simile:redirect_to con intestazione HTTP

request.headers['Accept'] = 'application/json' 
redirect_to url 

Ovviamente questo non funziona, come request è la richiesta corrente, non il reindirizzamento. C'è un modo per chiamare redirect_to con intestazioni HTTP personalizzate?

risposta

0

Non si può farlo direttamente, ma c'è un modo indiretto per farlo

redirect_to your_url, flash: {accept_header: 'application/json'}

e quindi controllare il flash [: accept_header] nell'URL di destinazione.

Questo non è particolarmente elegante, ma funziona. È analogo all'utilizzo di un parametro url speciale - your_url (accept_header: json) - ma non verrà visualizzato dall'utente/inserito/ecc.

+0

Sembra una soluzione * perfetta *. Sfortunatamente, c'è qualcosa di molto sbagliato in questa nuovissima app che ho creato. Penso di sapere perché non ci sono intestazioni. La stampa del flash sul log restituisce solo questo: '' '# # ActionDispatch :: Flash :: FlashHash: 0x007fb86c11a978 @discard = # , @flashes = {" alert "=>" Devi primo accesso. "}, @ now = nil> ' '' – AKWF

+0

Il problema è che ho disabilitato tutto '' 'before_actions'''. Non riesco a capire che Rails 4.2 stia cercando di verificare l'autenticazione su un'applicazione che ho lasciato aperta. È solo pazzo. Ho cercato la stringa "Devi prima accedere" e appare letteralmente dal nulla. Se riuscissi a capire cosa sta succedendo prima che arrivi alla mia pagina, allora avrei la risposta sul perché tutto è stato tolto dalla mia richiesta. È un vero mistero. – AKWF

2

Utilizzare il response object ...

Se si desidera impostare intestazioni personalizzate per una risposta, allora response.headers è il posto giusto per farlo. L'attributo headers è un hash che mappa i nomi delle intestazioni ai loro valori e Rails ne imposterà alcuni automaticamente . Se si desidera aggiungere o modificare un colpo di testa, basta assegnarlo a response.headers questo modo:

response.headers["Content-Type"] = "application/pdf"

2

E 'impossibile per reindirizzare a una pagina con intestazioni personalizzate set, non importa quale lingua o struttura che usi. In altre parole, non è possibile attivare un reindirizzamento HTTP e fare in modo che il client (browser) aggiunga un'intestazione personalizzata.

Come hai detto tu, stai impostando le intestazioni personalizzate per la risposta che sta istruendo il reindirizzamento del browser, non per il reindirizzamento stesso.

L'unico modo per un sito di indicare a un browser di inviare una richiesta HTTP con un'intestazione personalizzata è utilizzare Javascript e l'oggetto XMLHttpRequest.

Problemi correlati