无法从HttpListenerRequest读取InputStream

问题描述:

我一直在创建下载管理器,它接收来自chrome扩展的文件名和下载链接。
在这种情况下,我决定使用javascript后台页面发送XMLHttpRequest到环回,并创建简单的服务器来接收消息的背景页面是这样的。无法从HttpListenerRequest读取InputStream

background.js

function showMessageBox(info, tab) { 
    var link = decodeURIComponent(info.linkUrl); 
    var index = link.search(/[^/\\\?]+\.\w{3,4}(?=([\?&].*$|$))/); 
    var fileName = link.substring(index); 
    alert("will download from " + link + " soon\n File name : " + fileName); 
    SendMessage(fileName,link); 
} 
function SendMessage(fileName, link) { 
    var xhr = new XMLHttpRequest(); 
    xhr.open("POST","http://localhost:6230", false); 
    xhr.setRequestHeader("Content-Type", "application/json; charset=UTF-8"); 
    var JSONstring = JSON.stringify({ FileName: fileName, DownloadLink: link }); 
    xhr.send(JSONstring); 
} 

和服务器的一部分。

private void StartReciever() 
    { 
     while (true) 
     { 
      var fileInfo = GetFileInfo(); 
      Execute.OnUIThread(() => WindowManager.ShowDialog(
       new NewDownloadViewModel(WindowManager, EventAggregator, fileInfo, Engine))); 
     } 
    } 

    private FileInfo GetFileInfo() 
    { 
     using (var listener = new HttpListener()) 
     { 
      listener.Prefixes.Add("http://localhost:6230/"); 
      listener.Start(); 
      var requestContext = listener.GetContext(); 
      /*var streamReader = new StreamReader(requestContext.Request.InputStream, requestContext.Request.ContentEncoding); 
      string jsonString = streamReader.ReadToEnd();*/ 
      var stream = requestContext.Request.InputStream; 
      byte[] buffer = new byte[10240]; 
      var readbyte = stream.Read(buffer, 0, 102400); 
      string ss = Encoding.UTF8.GetString(buffer, 0, readbyte); 
      // deserialize string to object 

      return new FileInfo(); 
     } 
    } 

我想知道为什么流发送消息发送时总是返回0。

最后,我发现我忘了!

根据Same-origin policy,我无法发送http请求到不同的服务器。
我必须使用Cross-Origin XMLHttpRequest与不同来源的服务器进行通信。

要做到这一点,我需要Request cross-origin permissions通过添加主机名权限部分。
在我的情况下,我看起来像这样。

"permissions": [ 
"contextMenus", 
"http://localhost/", 
"nativeMessaging" 
] 

现在,我可以接收字符串并将其反序列化。