2017-09-13 156 views
0

我发送端口的请求60080HttpListenerContext.Request.InputStream总是空

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(); 

,并使用HttpListener

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

,所以我得到HttpListenerContext

HttpListenerContext context = listener.EndGetContext(result); 

当我尝试收到要获得InputStream(在Android或UWP上),它始终为空。 ContentLength = 0; 当我在iOS上测试InputStream不为空和ContentLength > 0;

我的问题是什么?

UPDATE:

我解决我的问题。

我发送了一个Post方法,但实际上是方法OPTIONS。

我发送的头一个反应和随后而来的邮政法

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

哪里代码运行的每一个部分?第一部分看起来像JavaScript,这是在哪里调用的? – Cheesebaron

+1

是的,这个JS的第一部分。它是在webview中启动应用程序时调用的。 HttpListenerContext context = listener.EndGetContext(result);在HandleRequest中调用。我解决了我的问题。查看更新。 – temiklis

+0

您可以将解决方案添加为答案,并在24小时后接受它? – Cheesebaron

回答

0

我解决我的问题。

我发送了一个Post方法,但实际上是方法OPTIONS。

这是由于CORS技术。

我发送一个响应头和随后而来的邮政法

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();