2009-08-21 9 views
12

J'ai une ancienne application qui utilise le proxy de service Web classique pour interagir avec un service Web Java. Il y a quelque temps, l'hébergeur du service Web a décidé d'exiger qu'un en-tête HTTP personnalisé soit envoyé avec chaque requête afin d'accéder au service - sinon les demandes sont purement et simplement rejetées (cela ressemble à une exigence du routeur). Indépendamment de la raison pour laquelle je dois injecter un en-tête HTTP personnalisé dans la requête.Ajout d'en-têtes HTTP personnalisés au proxy de service Web

Y at-il un moyen d'interagir avec le client Http réel pour faire des choses comme ajouter des en-têtes personnalisés?

+0

je suis tombé sur ce problème lorsque notre IT a implémenté Apache mod_security qui cherchait Accepter en-tête, et trouvé la solution la mieux votée ci-dessous pour fonctionner. –

Répondre

17

Vous devriez être en mesure de le faire en remplaçant la méthode GetWebRequest de la classe proxy dans une classe partielle dans un fichier distinct. Après avoir appelé la méthode de classe de base, vous devriez être en mesure de modifier le retour HttpWebRequest comme bon vous semble, puis retournez-le de la méthode:

public partial class MyServiceProxy { 
    protected override WebRequest GetWebRequest(Uri uri) { 
     HttpWebRequest request = (HttpWebRequest) base.GetWebRequest(uri); 
     // do what you will with request. 
     return request; 
    } 
} 
+1

Yup qui fait l'affaire. Je génère basiquement des proxies via le code et j'ai pu générer la classe et injecter du code pour ajouter des en-têtes en ajoutant une propriété Headers qui est vérifiée et utilisée dans GetWebRequest pour ajouter des en-têtes supplémentaires. Moche, mais ça marche très bien! –

+0

merci pour la solution. Comment puis-je utiliser ce processus avec mon projet client de service Web? – Jack

+0

@Jack: il s'agit du projet client du service Web. De plus, il vaut mieux utiliser la WCF si vous avez le choix. –

Questions connexes