C#Web – 本地主机:端口的作品,127.0.0.1:port不起作用

我刚刚完成将C#Web API组件(Web API模型和控制器)添加到现有项目的localhost副本。

这个Web API的GET方法应该从Android应用程序中调用。 在这个链接中解释了我应该在Android模拟器上使用10.0.2.2来获得计算机的127.0.0.1

当我这样做,它不适合我的HttpRequest在Android应用程序。 所以我去了Android浏览器,直接input,也没有工作。

然后,我尝试使用127.0.0.1而不是localhost在我的电脑的浏览器,并出于一些未知的原因,它也无法正常工作..是否有不同之间的localhost127.0.0.1 ? 我一直认为他们是一样的。

这里是使用127.0.0.1时得到的400 error127.0.0.1错误400错误的请求

localhost一切正常。

所以,我的问题是:如何在模拟器上使用localhost (或者,如何解决使用127.0.0.1而不是localhost时出现的错误)? 另外,我想知道localhost127.0.0.1之间的区别,因为我一直认为它们是一样的。

预先感谢回复。


编辑1:

在这个stackoverflow问题他们提到Windows的System32中的主机文件。 我用Notepad ++(以pipe理员身份)打开这个文件,并用127.0.0.1 localhost::1 localhost取消注释。 但不幸的是,这并没有解决问题,我仍然不能在我的电脑上使用127.0.0.1作为localhost的替代品。 可能是因为我的问题是相反的(我可以访问localhost ,但不是127.0.0.1 ,而不是相反的方式)。


编辑2:

在这个stackoverflow答案解释说, localhost127.0.0.1之间的区别是:

  • 在某些编程语言中, 127.0.0.1将更容易被识别为IP。
  • localhost可以更改为计算机的主机文件中的另一个IP(我的编辑1中提到的文件)。
  • IPv4和IPv6有一些区别。

总而言之,我有点了解现在的差异,我只是不明白为什么我的本地主机工作,但127.0.0.1不是..


编辑3:

它是否必须做一些port (我使用54408作为port )? 我已经打开cmd并做了以下testing:

  • ping localhost :我收到Reply from ::1: time<1ms 4次Reply from ::1: time<1ms
  • ping 127.0.0.1 :我得到一个响应4次Reply from 127.0.0.1: bytes=32 time<1ms TIL=128
  • ping localhost:54408 :我得到一个错误Ping request could not find localhost:54408. Please check the name and try again. Ping request could not find localhost:54408. Please check the name and try again.
  • ping 127.0.0.1:54408 :我得到一个错误Ping request could not find 127.0.0.1:54408. Please check the name and try again. Ping request could not find 127.0.0.1:54408. Please check the name and try again.

就像我之前说过的:浏览器中的127.0.0.1:54408给出了上图中的错误。 和localhost:54408工作得很好..

仍然没有人有如何解决这个问题的想法?


编辑4:

复制我的hosts-file ,位于C:\Windows\System32\drivers\etc

 # Copyright (c) 1993-2009 Microsoft Corp. # # This is a sample HOSTS file used by Microsoft TCP/IP for Windows. # # This file contains the mappings of IP addresses to host names. Each # entry should be kept on an individual line. The IP address should # be placed in the first column followed by the corresponding host name. # The IP address and the host name should be separated by at least one # space. # # Additionally, comments (such as these) may be inserted on individual # lines or following the machine name denoted by a '#' symbol. # # For example: # # 102.54.94.97 rhino.acme.com # source server # 38.25.63.10 x.acme.com # x client host # localhost name resolution is handled within DNS itself. 127.0.0.1 localhost ::1 localhost 

最后两行是:

 # 127.0.0.1 localhost # ::1 localhost 

编辑5 /半解决scheme:

在杰克C的build议后,我去寻找Visual Studio端口configuration,并find以下网站 。 在“ 为使用Visual Studio开发服务器的Web应用程序项目指定端口 ”部分,我按照说明操作,并将项目属性中的Web选项更改为Use Visual Studio Development Server和我的54408 port

这是正确的方向迈出的一大步,因为127.0.0.1:54408主页现在可以正常工作。 但是,一旦我尝试在C#网站上使用Google OAuthlogin时,出现以下错误: 在这里输入图像说明

我曾经在C#web项目上工作过的一位前同事告诉过我一次关于这个stackoverflow的post 。 在这篇文章的答案是说,我应该添加redirect-urls (在我的情况下是127.0.0.1 )到Google APIs Console 。 现在我无法访问我的localhost项目的Console ,因为它是通过SVN 。 我将要求我的一位主pipe有权查看此C#web项目的Google APIs Console ,并可能编辑包含127.0.0.1redirect-urls

一旦我完全工作,我会接受Jake C的回答,因为他对Http port configurations解释确实帮助我find答案。


编辑6:

好的,我已经使用了我自己的Google API控制台,并用新的客户端ID创build了一个新的项目。 我已经将http://localhost:54408/Account/ExternalLoginCallbackhttp:127.0.0.1:54408/Account/ExternalLoginCallback到redirect的URL。 然后在我的C#web项目的App_Start/AuthConfig.cs我改变了客户端的设置来使用这个新的客户端。

再次感谢Jake Cbuild议您在Visual Studio中更改http port configurations 。 这为我做了诡计。

Solutions Collecting From Web of "C#Web – 本地主机:端口的作品,127.0.0.1:port不起作用"

所以通常HTTP 400无效主机名错误通常意味着您没有网站设置接受所有主机名和/或IP地址。 我认为,因为这是一个C#应用程序,你在IIS上托pipe这个。 要解决这个打开IISpipe理器(Win + R并inputinetmgr ),展开服务器,然后站点,然后右键单击托pipe您的应用程序的网站,并select绑定。 在这个列表中应该有一个端口54408的http绑定,双击这个。 在IP地址下,确保select了所有未分配,然后在主机名下确保该字段为空。 点击确定,然后closures。 该设置应立即生效,无需重置IIS。

如果你只是通过Visual Studio内置的web部署来testing这个,那么在VS上面有类似的设置(我有点生疏,所以我不记得在哪里或如何)。 或者,您可以在IIS中设置一个网站,并将其部署到该网站,而不是使用自己的内部服务器。 我认为这样做可能会有一些debugging缺陷(我再次对细节有点模糊,当我记住它们或者想出来的时候,我会对它们进行编辑)。

关于为什么这些设置存在的一点背景:有时服务器需要托pipe多个站点,都是通过端口80访问。因此,可以说我们有foo.combar.com ,他们太小,不能保证独立服务器为他们两个。 因此,它们都被托pipe在IP地址为1.2.3.4的服务器上。 现在,当您将URL foo.cominput到浏览器并点击时,它首先将主机名parsing为1.2.3.4 ,然后创build一个请求,并将该请求的一部分称为主机头。 主机头部填充了input的URL的主机名,在本例中为foo.com 。 当服务器收到请求时,它会查看主机头并返回foo.com的内容。

现在,如果您尝试在浏览器中input1.2.3.4 ,则会创build一个带有空白主机标头的请求,因为没有指定。 当服务器接收到请求时,它不知道该怎么办,因为有两个网站由服务器托pipe,并且没有主机头来指定浏览器正在查找哪一个,所以相反,它会返回一个错误。

这可能是你情况正在发生的事情。 您的网站托pipe在localhost主机名下,其他任何请求都没有被回复。 我指定要更改的设置基本上是告诉服务器,无论它使用什么IP地址(networking接口),也不pipe它正在查找的主机名是什么,只要它在端口54408进来,就为此服务网站。

如果您使用的是Visual Studio内置的Web服务器(IIS Express),则默认情况下会映射localhost; 启用127.0.0.1:

1)在path:%USERPROFILE%\ Documents \ IISExpress \ config

2)findconfiguration文件:applicationhost.config

3) – 在编辑器中打开configuration文件(我使用notepad ++)

4)search网站端口,例如,如果url通常是本地主机:57578,search“57578”,你应该会发现:

 <binding protocol="http" bindingInformation="*:57578:localhost" /> 

5)将此条目更改为:

 <binding protocol="http" bindingInformation="*:57578:*" /> 

6)保存并退出,重新启动网站。

注意:每当您创build一个新的虚拟目录(更改端口号Project / Properties / Web / Project Url)时,您都会希望重复此过程,从而在applicationhost.config文件中创build一个新条目。

在使用IIS express的visual studio 2015中:首先在项目属性中将项目url从http:// localhost:(Port No)更改为: http : //127.0.0.1 :(Port No)

并点击创build视觉目录

然后转到解决schemepath并打开“.vs”dirctory(目录隐藏)并打开“applicationhost.config”

 <sites> <site name="WebSite1" id="1" serverAutoStart="true"> <application path="/"> <virtualDirectory path="/" physicalPath="%IIS_SITES_HOME%\WebSite1" /> </application> <bindings> <binding protocol="http" bindingInformation=":8080:localhost" /> </bindings> </site> <site name="####" id="2"> <application path="/" applicationPool="Clr4IntegratedAppPool"> <virtualDirectory path="/" physicalPath="E:\Visual Studio 2015\Projects\####\####" /> </application> <bindings> <binding protocol="http" bindingInformation="*:5050:localhost" /> </bindings> </site> <site name="####(1)" id="3"> <application path="/" applicationPool="Clr4IntegratedAppPool"> <virtualDirectory path="/" physicalPath="E:\Visual Studio 2015\Projects\####\####" /> </application> <bindings> <binding protocol="http" bindingInformation="*:5050:127.0.0.1" /> </bindings> </site> <siteDefaults> <logFile logFormat="W3C" directory="%IIS_USER_HOME%\Logs" /> <traceFailedRequestsLogging directory="%IIS_USER_HOME%\TraceLogFiles" enabled="true" maxLogFileSizeKB="1024" /> </siteDefaults> <applicationDefaults applicationPool="Clr4IntegratedAppPool" /> <virtualDirectoryDefaults allowSubDirConfig="true" /> </sites> 

并改变您的网页应用程序的最后一个绑定部分从* :(端口号):本地主机到* :(端口号):127.0.0.1

并停止IIS Express上的所有正在运行的项目并重新启动它们。

我知道这是一个旧的职位。 但是我的解决scheme可以帮助至less几分钟的时间。 如果您正在运行的网站上有多个绑定,请将其删除。 只有一个IP地址:全部未分配和主机名设置为空白 在这里输入图像说明

这可能不是Android或Windows的问题。 如果您通过Visual Studio运行本地主机,您将无法通过127.0.0.1获得它

而是尝试在您的计算机上设置IIS,然后从Visual Studio部署到IIS

或者,尝试使用UltiDev产品: http ://ultidev.com/products/cassini/CassiniDevGuide.htm http://ultidev.com/products/UWS-Cassini-Pro/Default.aspx

有些人设法使用隧道,但我从来没有尝试过,也不知道推荐什么。

只是听127.0.0.1和redirect到它和本地主机的数据