2017-10-04 15 views
2

S'il vous plaît excusez-moi si je regarde comme si je fais quelque chose de stupide ici. J'ai essayé de parcourir d'autres questions de débordement de pile pour la réponse à mon problème, mais ne semble pas aller nulle part.C# HttpWebRequest erreur de réponse (401)

Je travaille sur une application MVC de base dotnet et je souhaite renvoyer certaines données d'un serveur distant. J'utilise la classe HttpWebRequest.

Dans Fiddler j'ai exécuté ce qui suit en utilisant le compositeur.

enter image description here

Comme vous pouvez le voir sa simple demande GET avec deux biscuits passés dans l'en-tête.

Cela fonctionne très bien et me renvoie exactement ce dont j'ai besoin.

Je puis rédigez ma demande dans le monde dotnet comme suit:

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); 

request.CookieContainer = new CookieContainer(); 

request.CookieContainer.Add(new Cookie("name", "value", "/", "localhost")); 

(ne comprenait pas autre biscuit pour but de la question)

J'appelle alors:

var httpResponse = (HttpWebResponse)request.GetResponse(); 

Pourtant, recevez 'Le serveur distant a renvoyé une erreur: (401) non autorisé'

des idées que je fais mal ici? J'ai essayé d'ajouter la ligne de code suivante à des fins de test, mais toujours pas de chance.

request.ServerCertificateValidationCallback = delegate { return true; }; 

Toutes les réponses ont été appréciées. De plus, comme je l'ai mentionné, je ne suis pas un expert alors je pourrais juste faire quelque chose de stupide!

James

+2

Pouvez-vous utiliser fiddler pour regarder la requête qui est produite à partir du code C#? En quoi est-ce différent de la requête de travail que vous avez produite dans fiddler? – Alfredo

+2

Est-ce que votre requête va à localhost? Vous avez défini le cookie uniquement sur le domaine localhost. –

+0

Salut @Ed T merci pour votre commentaire. J'ai fait ce que vous avez dit et changé cela au bon domaine et ... bingo! ça a marché. J'aurais dû repérer celui-là! Transformez cela en une réponse et je vais voter et marquer cela comme la réponse. James –

Répondre

1

Dans le constructeur Cookie, vous définissez comme « localhost » le domaine du cookie qui signifie qu'il ne sera livré aux demandes dans le domaine de localhost. Il doit être défini sur le domaine auquel vous envoyez la requête.

2

Je pense que votre demande est en défaut à POST, mais votre exemple Fiddler fait un GET.

Essayez d'ajouter:

  request.Method = "GET"; 
      request.ContentType = "text/xml; encoding='utf-8'"; 
+2

Salut @Scrappydog juste par intérêt J'ai aussi essayé, mais cela n'a pas fait de différence. La demande est toujours traitée en tant que GET. Je suppose qu'il n'y a aucun mal à rendre cela explicite, alors je suis en train de voter. –