Réponse.Redirection avec les en-têtes
Je suis en train de définir les en-têtes et de les rediriger vers une autre page comme celle - ci,
Response.Headers.Add("id", "testtest");
Response.Redirect("http://www.somesite.com/somepage.aspx");
Et dans le page_load
de somepage.aspx, je suis la vérification de la demande pour les en-têtes -
if (!string.IsNullOrEmpty(Request["id"]))
{
//do something with "id"
}
Mais Request["id"
] est toujours null. Comment puis-je obtenir les valeurs de l'en-tête dans la nouvelle page? Je ne veux pas utiliser des chaînes de requête.
Merci!
Mise à jour:
Voici un peu plus de détails, j'ai deux ASP.NET v4 applications web (Site 1 et le Site 2) en cours d'exécution sur deux machines différentes. Site 1 n'a qu'un seul aspx forme et il n'a qu'un seul bouton sur elle. Sur clic de bouton, j'ai repris la base de données et obtenir la valeur que j'ai besoin et devrait passer sur le Site 2. Dans le Global.asax de Site 2, je vais lire les informations d'en-tête reçu du Site 1 et de l'utilisation de la valeur.
Mise à jour #2:
J'ai été en mesure de l'obtenir pour fonctionner --
Response.Write(
string.Format(
@"<form action='{0}' id='test' method='POST'><input type='hidden' name='key' value={1} /></form>
<script type='text/javascript'>
document.getElementById('test').submit();
</script> ",
"http://www.somesite.com", "1234"));
Dans le site de destination, j'ai été en mesure d'obtenir la valeur à l'aide -
Request["key"]
OriginalL'auteur tempid | 2010-11-01
Vous devez vous connecter pour publier un commentaire.
En-têtes HTTP sont valables uniquement pour la réponse actuelle. Lorsque vous définissez une rediriger la réponse actuelle contient votre en-tête personnalisé, mais lorsque le navigateur suit la redirection emplacement de ces en-têtes ne sont plus présents. En outre, vous utilisez
Request["id"]
dans l'autre page, donc vous avez besoin pour envoyer la valeur de chaîne de requête:Si vous ne voulez pas que les utilisateurs puissent voir l'id de la seule façon d'y parvenir est d'utiliser de la Session. Les en-têtes HTTP sont également visible par les utilisateurs.
Je comprends les en-têtes HTTP sera visible que si les utilisateurs se servent de certains d'en-tête HTTP sniffer de l'utilitaire, et c'est correct comme la plupart des gens ne sont pas la peine. J'ai peut-être tort, mais je ne pense pas que je pourrais Session d'utilisation que le site source et le site de destination sont sur deux machines différentes.
OK, je comprends. Vous ne pouvez pas utiliser les en-têtes et de redirection, pour les raisons citées dans mon post. Une autre possibilité est de générer un formulaire HTML avec un caché d'entrée et de POST à l'autre script au lieu de les OBTENIR. De cette façon, la valeur de l'id sera dans le POST du corps et n'est pas visible dans la chaîne de requête.
Je vous remercie. Pourriez-vous nous donner un exemple? Puis-je le faire avec de la Réponse.Write(<script html>)? Ou peut-être ClientScriptManager.RegisterStartupScript ou quelque chose?
OriginalL'auteur Darin Dimitrov
Réponse.Les en-têtes.Add("id", "testtest");
est de ne pas avoir l'effet escompté, parce que vous n'avez jamais envoyé de Réponse au client. Si vous utilisez Réponse.Redirection, vous êtes tout simplement la redirection vers l'url et l'objet de la Requête n'est pas hyderated avec votre Réponse précédente, params.
Vous pouvez utiliser une certaine forme AppContext/mécanisme de Session pour passer des paramètres entre ces deux pages.
OriginalL'auteur Srikanth Remani
Il n'y a pas moyen d'ajouter des en-têtes de la requête http, mais d'entamer une par une action de l'utilisateur par le biais d'un navigateur ou d'autres programmes ou en envoyant une demande sur votre propre.
De sorte que vous pourrait simplement utiliser l'un de ces clients http dans the.Net Cadre comme le
HttpClient
ouHttpWebRequest
et envoyer une demande personnalisée avec n'importe quel en-tête, vous voulez au lieu d'appelerResponse.Redirect
.Et pourtant, il est possible d'ajouter des en-têtes de Réponse http message uniquement dans IIS. Toujours aucun moyen de contrôler le conséquente en-têtes de requête lors de l'exécution d'une redirection.
OriginalL'auteur Arman McHitarian
Avez-vous essayé
Server.Transfer("http://www.somesite.com/somepage.aspx");
? Cela pourrait vous obtenir les données dont vous avez besoin. Si non, vous aurez à valider les données dans le formulaire sur votre page d'origine si vous ne souhaitez pas utiliser la variable de Session.J'ai pris en charge en fonction de votre description originale que vous pourriez mettre cette information dans un champ caché, ce qui lui permettrait de se présenter sur la nouvelle page après l'utilisation de Serveur.Transfert (ou la soumission d'un formulaire, si il y en a un). Darin a suggéré la même chose, si vous pouvez poster plus de détails au sujet de votre page d'origine, nous pouvons vous suggérer des façons pour vous d'obtenir des informations entre les Url. Il est difficile de dire à partir de la description actuelle si vous pouvez utiliser un formulaire sur la page d'origine, et quels sont vos autres contraintes techniques sont/peut-être.
J'ai mis à jour le post original pour inclure davantage d'informations.
J'ai essayé ce -- Réponse.Write( string.Format( @"<form action='{0}' id='test' method='POST'><input type='hidden' id='clé' valeur={1} /></form> <script type='text/javascript'> document.getElementById('test').submit(); </script> ", "somepage.com", "1234")); Mais quand je ne Demande["clé"] sur le site de destination, il est nul. Vous ne savez pas où je vais mal. Merci.
Je l'ai eu!! Dans le champ caché au-dessus, je devrais être à l'aide de l'attribut "name" au lieu de "id" pour pouvoir l'utiliser dans le site de destination. Cela a fonctionné -- Réponse.Write( string.Format( @"<form action='{0}' id='test' method='POST'><input type='hidden' name='clé' valeur={1} /></form> <script type='text/javascript'> document.getElementById('test').submit(); </script> ", "somepage.com", "1234"));
OriginalL'auteur jwheron