2013-01-14 1 views
2

Dans mon site, je me sers des formulaires authentication.And Je veux faire un WebRequest à cet effet je prends l'aide de CookieContainer Code .Mon est ceun Authentifier WebRequest en ajoutant les cookies throws erreur

string url = HttpContext.Current.Request.Url.AbsoluteUri; 
    HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url); 
    HttpCookie cookie = HttpContext.Current.Request.Cookies[FormsAuthentication.FormsCookieName]; 
    Cookie authenticationCookie = new Cookie(
     FormsAuthentication.FormsCookieName, 
     cookie.Value, 
     cookie.Path, 
     HttpContext.Current.Request.Url.Authority); 
    req.CookieContainer = new CookieContainer(); 
    req.CookieContainer.Add(authenticationCookie); 
    WebResponse res = req.GetResponse(); 

mais ce code renvoie une erreur « le = « domaine » « localhost: 300 ». partie du cookie est invalide » .Ainsi j'ai trouvé l'erreur provient de cette ligne de code

Cookie authenticationCookie = new Cookie(
    FormsAuthentication.FormsCookieName, 
    cookie.Value, 
    cookie.Path, 
    HttpContext.Current.Request.Url.Authority); 

l'URL de le site est localhost: 300. Je suis incapable de trouver une solution pour cela. Quelqu'un peut-il me dire ce qui s'est mal passé?

Répondre

5

Essayez d'exclure le numéro de port de la propriété de domaine que vous passez au constructeur Cookie:

Cookie authenticationCookie = new Cookie(
    FormsAuthentication.FormsCookieName, 
    cookie.Value, 
    cookie.Path, 
    HttpContext.Current.Request.Url.Host 
); 

ou définir le cookie comme un en-tête HTTP directement sans utiliser un conteneur de cookie:

HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url); 
HttpCookie cookie = HttpContext.Current.Request.Cookies[FormsAuthentication.FormsCookieName]; 
req.Headers[HttpRequestHeader.Cookie] = string.Format("{0}={1}", cookie.Name, cookie.Value); 
WebResponse res = req.GetResponse(); 
+0

I Je ne sais pas pourquoi, mais lorsque l'exécution du code atteint cette ligne "WebResponse res = req.GetResponse();" il retourne à la première ligne (HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);) comme dans une boucle. Enfin, une erreur se produit "La requête a été abandonnée: l'opération a expiré." – Athul

+0

Je ne sais pas pourquoi cela pourrait se produire. Peut-être que vous avez plusieurs threads. Difficile à dire du code que vous avez montré. Peut-être que le problème est du côté du serveur. Maintenant que vous êtes authentifié avec succès, il doit y avoir un autre problème sur le serveur. Vous pouvez activer la trace réseau et voir exactement ce qui est envoyé sur le réseau en suivant ces étapes: http://msdn.microsoft.com/en-us/library/ty48b824.aspx. Ou utilisez simplement un outil comme Fiddler pour voir ce qui se passe sous les couvertures. –