C# 无法从http访问127.0.0.1。我必须使用android设备不支持的localhost

C# 无法从http访问127.0.0.1。我必须使用android设备不支持的localhost,c#,unity3d,microsoft-graph-api,C#,Unity3d,Microsoft Graph Api,我不确定这是否是一个错误。 如果是我已经使用过github的bug: 如果不是,我需要帮助。 我正在Unity3d中使用microsoft graph for我的游戏将保存文件存储在一个驱动器用户帐户上。 我可以使用localhost,但在android设备上,我必须使用127.0.0.1作为localhost。 对于dropbox和google,我能够做到。。。但microsoft graph不适用于ip localhost上的http,如127.0.0.1。它只适用于http上的local

我不确定这是否是一个错误。 如果是我已经使用过github的bug:

如果不是,我需要帮助。 我正在Unity3d中使用microsoft graph for我的游戏将保存文件存储在一个驱动器用户帐户上。 我可以使用localhost,但在android设备上,我必须使用127.0.0.1作为localhost。 对于dropbox和google,我能够做到。。。但microsoft graph不适用于ip localhost上的http,如127.0.0.1。它只适用于http上的localhost,127.0.0.1需要https。。。当然,c#for loopback中的HttpListener只适用于http(由于这是一款游戏,我需要用户在android上使用它,而不需要奇怪的配置)。 我认为这是一个错误,因为boot dropbox和google使您能够使用http for 127.0.0.1。。。但是如果它不是一个bug,您将如何解决这个问题?甚至可以在环回中与HttpListener或类似的东西一起使用https,而不需要任何奇怪的配置? 您应该知道,如果我在登录后手动将重定向url更改为http,我就能够使其正常工作。 唯一的问题是我不想设置服务器多次重定向用户。。我希望我的游戏在localhost中查找重定向url响应(android上的响应应该是127.0.0.1)

我需要知道是否有可能在127.0.0.1中使用https和HttpListener(或类似的东西),或者您知道如何在没有任何Web应用程序的情况下解决这个问题

var httpListener = new HttpListener();
httpListener.Prefixes.Add("http://127.0.0.1:" + anyfreeportonyourpc + "/");
httpListener.Start();

我不确定这是一个bug还是你说的一个特性,但我有一些想法你可以试试

可能最简单的解决方法就是使用-这种方法可以使用
http://localtest.me:80
这是一个指向127.0.0.1的公共DNS记录-对于测试来说很好,但在本例中,这是一个非常巧妙的解决方法

但正如你提到的,它需要加密,所以基于上述想法,你可以在你自己的域名上进行加密。免费获取证书,并将其指向127.0.0.1,然后在设备上使用

假设您有一个名为
a.pl
的域,去创建一个子域
local.a.pl
,并将该子域上的a记录设置为
127.0.0.1
(这通常是一个带有web应用程序的服务器,但在这种情况下,我们希望使用它来解决问题)使用lets encrypt将证书放在上面,这样您就可以使用HTTPS,或者自签名也可以,我不知道

然后在代码中执行此操作

httpListener.Prefixes.Add("https://local.a.pl:" + anyfreeportonyourpc + "/");
是的,您的应用程序首先需要internet连接才能找到DNS记录,并将其缓存在移动设备上。将TTL设置为最大值将有助于在没有internet的情况下缓存它。因此,一旦问题解决,您就可以将该域用于您所需的与本地设备的每个连接。它只需要2秒钟的互联网缓存DNS条目

以某种方式添加主机查找的另一种方法。。。不知道怎么做,但是一个简单的本地文件会将一条记录添加到
myapp.local
,指向hosts文件中的127。这仅仅是出于解决问题的目的而进行的私人级别的查找,但由于过去的过度滥用,在手机上添加该记录可能并不直接


这听起来就像图形服务器绑定只设置为主机名
localhost
。。。查看是否可以将其更改或放宽为IP地址。这将解决问题的根本原因。我知道这些东西有时有愚蠢的绑定。

这是个bug。如果微软不更新他们的代码,就没有办法解决这个问题

编辑。最后是一个简单的解决方案:

- just make a simple blog with wordpress
- activate https
- publish your blog in a free site like altervista
- install Insert Headers and Footers
- use this simple code

<script>
if(window.location.href.startsWith("https://yourblogaddress.altervista.org/blog/yourpostpath/")){
var stringPartUrl = window.location.href.substring(numberofcharinyoururl);
window.location.replace("http://localhostor127.0.0.1:yourport/" + stringPartUrl);
}
</script>
-只需使用wordpress创建一个简单的博客
-激活https
-在altervista这样的免费网站上发布您的博客
-安装插入页眉和页脚
-使用这个简单的代码
if(window.location.href.startsWith(“https://yourblogaddress.altervista.org/blog/yourpostpath/")){
var stringPartUrl=window.location.href.substring(numberofcharinyoururl);
window.location.replace(“http://localhostor127.0.0.1:yourport/“+stringPartUrl);
}
之后,只需设置
https://yourblogaddress.altervista.org/blog/yourpostpath/
在新的azure portal应用程序中,更改应用程序中的OpenURL和重定向uri(但不是前缀。添加应为127 o localhost url的url)。 每次有人登录时,应将oauth重定向到他/她的microsoft帐户,该帐户应重定向到您的https博客地址,该地址应重定向到localhost或127,并将代码变量获取到您的应用程序,该应用程序最终应能接收上传/下载文件的验证代码


主要的问题是你的博客应该是在线的,你只能支持一个端口(因为你需要重定向一次)。最好的是,您不需要更改桌面上的实现(因为它们允许在新门户中再次使用带有常规http的localhost),并且您不需要付费域来做任何事情。

我认为这两种方法都不能解决我的问题。第一个原因是MicrosoftGraph需要一个完美的url匹配(他们甚至想要这个端口)。除了localhost之外,他们还需要https(这就是为什么我不确定这是否是一个bug,因为127.0.0.1应该是localhost)。此外,我已经看到,如果没有root用户,您无法在android上编辑hosts文件(即使可能,这也不是最终用户的解决方案)。无论如何,谢谢你。那么你将不得不尝试以某种方式安装一个本地主机证书-例如,在Visual Studio中,这已经可以在
https://localhost
但我不知道如何在终端客户端设备上实现这一点。从技术上讲,允许使用加密的本地服务(如graph)应该是这样的。“但我不知道如何在终端客户机设备上做到这一点。”是的,如果不是bug,这就是问题所在。我真的不知道如何为https生成证书,并在clien上这样做