2012-09-20 45 views
8

No estoy seguro de si esto es posible o tiene algún sentido, pero estoy tratando de hacer una redirección después de configurar un campo de encabezado HTTP. Algo así como:redirect_to con encabezado HTTP

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

Obviamente esto no funciona, como es request la petición actual, no la redirección. ¿Hay alguna manera de llamar al redirect_to con encabezados HTTP personalizados?

Respuesta

0

No puede hacerlo directamente, pero hay una forma indirecta de hacerlo

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

y después comprobar el flash [: accept_header] en la URL de destino.

Esto no es particularmente elegante, pero funciona. Es análogo a usar un parámetro de url especial - your_url (accept_header: json) - pero no será visto por el usuario/bookmarked/etc.

+0

Esto parece una solución * perfecta *. Lamentablemente, algo está muy mal con esta nueva aplicación que he configurado. Creo que sé por qué no hay encabezados. Imprimir el flash en el registro solo produce esto: '' '# , @flashes = {" alert "=>" Debe primer inicio de sesión. "}, @ now = nil> ' '' – AKWF

+0

El problema es que he desactivado todas las '' 'before_actions'''. No puedo entender qué pasa con Rails 4.2 está tratando de verificar la autenticación en una aplicación que he dejado abierta. Es una locura He buscado la cadena "Primero debe iniciar sesión", y literalmente aparece de la nada. Si pudiera descubrir qué está pasando antes de que llegue a mi página, entonces tendré la respuesta sobre por qué todo se está despojando de mi pedido. Es un verdadero misterio. – AKWF

2

Uso del response object ...

Si desea establecer cabeceras personalizadas para una respuesta response.headers continuación es el lugar para hacerlo. El atributo de encabezados es un hash que asigna los nombres de encabezado a sus valores, y Rails configurará algunos de ellos automáticamente. Si desea añadir o cambiar un encabezado, simplemente asignarla a response.headers esta manera:

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

2

Es imposible para redirigir a una página con cabeceras personalizadas establecido, sin importar el idioma o marco que usas En otras palabras, no hay forma de desencadenar un redireccionamiento HTTP y hacer que el cliente (navegador) agregue un encabezado personalizado.

Como usted mismo ha mencionado, se está configurando las cabeceras personalizadas para la respuesta que está instruyendo el navegador para redirigir, no para la propia redirección.

La única manera de que un sitio instruya a un navegador para que emita una solicitud HTTP con un encabezado personalizado es usar Javascript y el objeto XMLHttpRequest.

Cuestiones relacionadas