2017-09-13 3 views
0

J'envoie une requête sur le port 60080HttpListenerContext.Request.InputStream toujours null

var XHR = new XMLHttpRequest(); 
XHR.open('GET', 'http://localhost:60080/api/products'); 
XHR.setRequestHeader("Content-Type", "application/json; charset=UTF-8"); 
XHR.body = JSON.stringify({ email: "[email protected]", response: { name: "Tester" } }); 
XHR.send(); 

et de recevoir l'aide HttpListener

this.listener = new HttpListener(); 
listener.Prefixes.Add("http://+:60080/"); 
listener.Start(); 
listener.BeginGetContext(HandleRequest, listener); 

si je reçois HttpListenerContext

HttpListenerContext context = listener.EndGetContext(result); 

Quand j'essaye pour obtenir InputStream (sur Android ou UWP), il est constamment nul. ContentLength = 0; Lorsque je teste sur iOS InputStream non null et ContentLength > 0;

Quel est mon problème?

MISE À JOUR:

Je résolu mon problème.

Le fait que j'ai envoyé une méthode Post, mais en réalité la méthode OPTIONS.

J'ai envoyé les en-têtes dans une réponse et puis vint la méthode Post

httpListenerContext.Response.AddHeader("Access-Control-Allow-Headers", "Content-Type, Accept, X-Requested-With"); 
httpListenerContext.Response.AddHeader("Content-type", "application/json"); 
httpListenerContext.Response.AddHeader("Access-Control-Allow-Methods", "GET, POST"); 
httpListenerContext.Response.AddHeader("Access-Control-Max-Age", "1728000"); 
httpListenerContext.Response.AppendHeader("Access-Control-Allow-Origin", "*"); 
httpListenerContext.Response.Close(); 
+1

Où fait chaque partie de la course de code? La première partie ressemble à du JavaScript, c'est invoqué où? – Cheesebaron

+1

Oui, la première partie de ce js. Il est appelé lorsque l'application est lancée dans un webview. HttpListenerContext context = listener.EndGetContext (résultat); appelé dans HandleRequest. J'ai résolu mon problème. Voir mise à jour. – temiklis

+0

Pouvez-vous ajouter votre solution en guise de réponse et l'accepter après 24 heures? – Cheesebaron

Répondre

0

Je résolu mon problème.

Le fait que j'ai envoyé une méthode Post, mais en réalité la méthode OPTIONS.

cela est dû à la technologie CORS.

J'ai envoyé les en-têtes dans une réponse et puis vint la méthode Post

httpListenerContext.Response.AddHeader("Access-Control-Allow-Headers", "Content-Type, Accept, X-Requested-With"); 
httpListenerContext.Response.AddHeader("Content-type", "application/json"); 
httpListenerContext.Response.AddHeader("Access-Control-Allow-Methods", "GET, POST"); 
httpListenerContext.Response.AddHeader("Access-Control-Max-Age", "1728000"); 
httpListenerContext.Response.AppendHeader("Access-Control-Allow-Origin", "*"); 
httpListenerContext.Response.Close();