I have a page where based on certain conditions I am either doing a Response.Redirect or Server.Transfer. Now I want to add a header for both the cases. So I am doing the following
Response.AddHeader("Vary", "User-Agent");
if (condition)
{
Server.Transfer(redirectUrl);
}
else
{
Response.Redirect(redirectUrl);
}
Now, when the code goes via Server.Transfer code path, the Vary header is set to * whereas when it goes via Response.Redirect the header is correctly set to User-Agent.
Why does this happen and how can I set the Response Header to be same for both the cases?
Add header in
Source.aspx
and don't Change the header inDestination.aspx page
.If you want to display the result page as html then you should add header
content-type
astext/html
Andre is right that the Response object is replaced as part of
Server.Transfer
. If you want to make the page you're transferring to agnostic of the parent you can probably whack the information intoHttpContext.Items
and then use anIHttpModule
to extract the information and configure the header appropriately. Something like this would probably do the job...Cheers!
when you call
Server.Transfer
, the Response object of the current page will be replaced by the Response object of the target page (which is the Response that will actually be sent to the user). So, if you want to set this specific header attribute, you must do it on the target page.If it's conditional, maybe you can use a
HttpContext.Items
property, that is set on the first page and read on the second.Regards