2010-02-16 17 views
1

Je rencontre des problèmes lors de la définition d'une valeur d'en-tête HTTP lors d'une requête HttpRequest à partir de Silverlight 3.0?Pouvez-vous définir des en-têtes http lors de l'utilisation de l'objet HttpRequest dans Silverlight?

Les en-têtes HTTP sont-ils pris en charge dans Silverlight 3.0?

Le code suivant renvoie une exception lorsque le rappel de la demande est appelée:

 var url = new Uri("http://lonmw32795/RBSM_Portal_RESTfulWebService/HostInterrogationService.svc/host/environment"); 
     req = (HttpWebRequest)WebRequest.Create(url); 
     req.Headers[HttpRequestHeader.Pragma] = "no-cache"; 
     req.Method = "GET"; 

     req.BeginGetResponse(new AsyncCallback(WebComplete), req);  

Le type d'exception est System.NotSupportedException - WTF!

Quelqu'un a-t-il des idées?

Vive

AWC

+0

Quel est le texte du message que vous obtenez avec NotSupported? – AnthonyWJones

+0

Comment le code ci-dessus peut-il déclencher une exception si l'exception ne se produit que lorsque le rappel est appelé? Voulez-vous réellement dire quand le BeginGetResponse est appelé? – AnthonyWJones

Répondre

0

La réponse est simple: non, ce ne est pas - si vous voulez créer un HttpRequest vous devez utiliser la classe WebRequestCreator.

consultez this blog pour plus d'informations.

+0

Voulez-vous dire que vous devez utiliser le ClientHttp afin d'éviter les restrictions qui viennent avec l'utilisation de BrowserHttp? Nous voulons que les gens trouvent leurs questions déjà posées sur SO et que les réponses soient simples. Il serait utile si vous venez d'ajouter un peu plus de détails à la réponse. – AnthonyWJones

2

Notez que la documentation pour le, la page 646, la plupart des en-têtes utiles sont limitées, elle ne liste pas pragma mais elle indique également que les en-têtes restreints ne sont pas limités à la liste fournie.

Ces restrictions sont en place car le navigateur sous-jacent traiterait normalement les requêtes http et contrôlerait donc ces en-têtes en utilisant ses propres algorithmes.

Il peut être possible de le faire avec le ClientHttp comme celui-ci: -

var url = new Uri("http://lonmw32795/RBSM_Portal_RESTfulWebService/HostInterrogationService.svc/host/environment"); 
    req = (HttpWebRequest)WebRequestCreator.ClientHttp.Create(url); 

Notez que vous devez gérer les cookies nécessaires manuellement qui peut être un peu délicat si les cookies sont fixés dans le cadre de une réponse aux demandes qui utilisent BrowserHttp.