c# - ¿Cómo configurar el Encabezado de respuesta antes de Server.Transfer en Asp.Net?
http-headers response.redirect (2)
Andre tiene razón en que el objeto Response se reemplazó como parte de Server.Transfer
. Si desea hacer que la página se transfiera a un agnóstico del elemento primario, probablemente pueda ajustar la información en HttpContext.Items
y luego usar un IHttpModule
para extraer la información y configurar el encabezado de manera apropiada. Algo como esto probablemente haría el trabajo ...
Items.Add(VaryHttpModule.Key, "User-Agent");
if (condition)
{
Server.Transfer(redirectUrl);
}
else
{
Response.Redirect(redirectUrl);
}
public class VaryHttpModule : IHttpModule
{
public const string Key = "Vary";
public void Init(HttpApplication context)
{
context.PostRequestHandlerExecute +=
(sender, args) =>
{
HttpContext httpContext = ((HttpApplication)sender).Context;
IDictionary items = httpContext.Items;
if (!items.Contains(Key))
{
return;
}
object vary = items[Key];
if (vary == null)
{
return;
}
httpContext.Response.Headers.Add("Vary", vary.ToString());
};
}
public void Dispose()
{
}
}
¡Aclamaciones!
Tengo una página en la que, según ciertas condiciones, estoy haciendo un Response.Redirect o Server.Transfer. Ahora quiero agregar un encabezado para ambos casos. Así que estoy haciendo lo siguiente
Response.AddHeader("Vary", "User-Agent");
if (condition)
{
Server.Transfer(redirectUrl);
}
else
{
Response.Redirect(redirectUrl);
}
Ahora, cuando el código pasa a través de la ruta del código Server.Transfer, el encabezado Vary se establece en * mientras que cuando pasa a través de Response.Redirect, el encabezado se establece correctamente en User-Agent.
¿Por qué sucede esto y cómo puedo configurar el Encabezado de respuesta para ambos casos?
cuando llame a Server.Transfer
, el objeto Response de la página actual será reemplazado por el objeto Response de la página destino (que es la respuesta que realmente se enviará al usuario). Por lo tanto, si desea establecer este atributo de encabezado específico, debe hacerlo en la página de destino.
Si es condicional, tal vez pueda usar una propiedad HttpContext.Items
, que se establece en la primera página y se lee en la segunda.
Saludos