2017-04-21 1 views
0

J'aimerais pouvoir modifier l'URL contenue dans RequestUri d'un objet C# HttpWebRequest. Je voudrais ajouter un paramètre supplémentaire avec un ID de ticket. [comme & ticket = xyz123]Ajout de paramètres à C# HttpWebRequest

Il semble que cela ne soit pas possible car RequestUri est en lecture seule. Certaines personnes ont suggéré d'utiliser la réflexion pour contourner le problème, mais d'autres disent que même si vous utilisez la réflexion, cela ne fonctionnera pas.

Existe-t-il un autre moyen de contourner ce problème? Puis-je utiliser HttpWebRequest CookieContainer pour inclure les informations de ticket? Bien que le ticket ne figure pas dans un cookie, un appel de service spécial est nécessaire pour récupérer la chaîne de ticket.

Je suis en train de passer outre une méthode d'authentification comme suit:

protected override void HttpAuthenticate(HttpWebRequest request) 
    { 
     Uri uri = request.RequestUri; 
     Uri newUrl = new Uri(AuthData.appendTicket(uri.ToString())); 
     request.RequestUri = newUrl; // Cannot do this because it is readonly 

Répondre

1

Avec une réflexion suffisante hacking, vous pourriez être en mesure de le forcer, mais cela va à l'encontre du modèle architectural de base de la classe: l'URL d'un WebRequest est supposé être fixé au moment de la création. Si vous souhaitez faire une demande à une URL différente mais liée, pourquoi ne pas utiliser WebRequest.Create pour créer une nouvelle HttpWebRequest à une nouvelle URL formée en jouant avec le RequestUri du WebRequest original?

+0

J'essaie juste de remplacer cette méthode unique pour changer le mécanisme d'authentification. L'authentification standard de base définit les informations d'identification de HttpWebRequest. Au lieu de cela j'aimerais pouvoir ajouter l'information de billet - qui est normalement passée en tant que paramètre additionnel sur l'URL. –

+0

Je comprends le désir, mais ça ne marche pas. Vous pouvez changer le paramètre à passer par ref, puis changer l'entrée HttpWebRequest pour le nouveau HttpWebRequest dans la méthode. Probablement la principale raison pour laquelle HttpWebRequest est construit de cette façon est de vous empêcher d'échanger une URL http pour, disons, une URL ftp ou un fichier après la création de l'objet. –