2017-09-13 159 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();