问题背景
VS2019开发.Net项目,在本地调试的时候,使用localhost可以正常访问接口,但通过127.0.0.1IP访问接口失败。提示 HTTP Error 400. The request hostname is invalid.
报错截图:
解决方案
修改applicationhost.config 配置文件
- 配置文件路径
配置文件路径一般在当前解决方案的根目录,有一个隐藏文件夹 .vs , 找到.vs下的项目名称xxx下的config文件夹,里面有一个 applicationhost.config 文件。完整路径为:.vs\xxx\config\applicationhost.config
- 打开配置文件
- 修改配置
打开配置文件 applicationhost.config,找到里面的 sites 节点,在对应的项目的 bindings 节点下增加 ip 相关的配置。增加以下配置信息
参考附录
1. .vs 文件夹
.vs目录是用来存储当前用户在解决方案中的工作配置,具体包括VS关闭前最后的窗口布局、最后打开的选项卡/操作记录/文件文档、某些自定义配置/开发环境、调试断点等这类设置信息和状态。这样每当用户关闭解决方案后再重新打开,就能继续之前的工作状态。
在VS2015之前的版本,这些信息都是散乱的保存在解决方案根目录下(最明显的参照物就是.suo文件),现在是将这些统一放在.vs这个隐藏文件夹里,如果没在Windows系统中开启查看隐藏的文件和文件夹,还是很容易无视的。
通常来说如果团队有使用源代码版本管理系统,这个文件夹都是要加入忽略规则的,毕竟没必要同步每个人的使用习惯和当前工作进度。而且.vs目录本身具有临时性,就算删除后也完全不影响解决方案的启动和运行,反正vs也会自动重新生成,只是之前的工作配置及记录没有了,也就是相当于第一次打开这个项目。
2. applicationhost.config 文件
- 使用 IIS 7 及更高版本时,ApplicationHost.config是配置系统的根文件。 它包括所有站点、应用程序、虚拟目录和应用程序池的定义,以及 Web 服务器设置的全局默认值, (类似于machine.config,以及.NET Framework设置) 的根web.config。
- IIS 设置的配置架构文件路径:
C:\Windows\System32\inetsrv\config\schema
<sectionSchema name="system.applicationHost/sites">
<collection addElement="site" defaultElement="siteDefaults" >
<attribute name="name" type="string" required="true" isUniqueKey="true" validationType="siteName" />
<attribute name="id" type="uint" required="true" isUniqueKey="true" />
<attribute name="serverAutoStart" type="bool" defaultValue="true" />
<element name="bindings">
<collection addElement="binding" clearElement="clear">
<attribute name="protocol" type="string" required="true" isCombinedKey="true" validationType="nonEmptyString" />
<attribute name="bindingInformation" type="string" required="true" isCombinedKey="true" validationType="nonEmptyString" />
<attribute name="sslFlags" type="uint" defaultValue="0" />
</collection>
</element>
<element name="limits">
<attribute name="maxBandwidth" type="uint" validationType="integerRange" validationParameter="0,1023,exclude" defaultValue="4294967295"/>
<attribute name="maxConnections" type="uint" defaultValue="4294967295" />
<attribute name="connectionTimeout" type="timeSpan" defaultValue="00:02:00" validationType="timeSpanRange" validationParameter="0,65535,1" />
<attribute name="maxUrlSegments" type="uint" validationType="integerRange" validationParameter="0,16383" defaultValue="32" />
</element>
<element name="logFile">
<attribute name="logExtFileFlags" type="flags" defaultValue="Date, Time, ClientIP, UserName, ServerIP, Method, UriStem, UriQuery, TimeTaken, HttpStatus, Win32Status, ServerPort, UserAgent, HttpSubStatus, Referer">
<flag name="Date" value="1"/>
<flag name="Time" value="2"/>
<flag name="ClientIP" value="4"/>
<flag name="UserName" value="8"/>
<flag name="SiteName" value="16"/>
<flag name="ComputerName" value="32"/>
<flag name="ServerIP" value="64"/>
<flag name="Method" value="128"/>
<flag name="UriStem" value="256"/>
<flag name="UriQuery" value="512"/>
<flag name="HttpStatus" value="1024"/>
<flag name="Win32Status" value="2048"/>
<flag name="BytesSent" value="4096"/>
<flag name="BytesRecv" value="8192"/>
<flag name="TimeTaken" value="16384"/>
<flag name="ServerPort" value="32768"/>
<flag name="UserAgent" value="65536"/>
<flag name="Cookie" value="131072"/>
<flag name="Referer" value="262144"/>
<flag name="ProtocolVersion" value="524288"/>
<flag name="Host" value="1048576"/>
<flag name="HttpSubStatus" value="2097152"/>
</attribute>
<attribute name="customLogPluginClsid" type="string" defaultValue=""/>
<attribute name="logFormat" type="enum" defaultValue="W3C">
<enum name="IIS" value="0"/>
<enum name="NCSA" value="1"/>
<enum name="W3C" value="2"/>
<enum name="Custom" value="3"/>
</attribute>
<attribute name="logTargetW3C" type="flags" defaultValue="File">
<flag name="File" value="1"/>
<flag name="ETW" value="2"/>
</attribute>
<attribute name="directory" type="string" expanded="true" defaultValue="%SystemDrive%\inetpub\logs\LogFiles" validationType="nonEmptyString" />
<attribute name="period" type="enum" defaultValue="Daily">
<enum name="MaxSize" value="0"/>
<enum name="Daily" value="1"/>
<enum name="Weekly" value="2"/>
<enum name="Monthly" value="3"/>
<enum name="Hourly" value="4"/>
</attribute>
<attribute name="truncateSize" type="int64" defaultValue="20971520" validationType="integerRange" validationParameter="1048576,4294967295" />
<attribute name="localTimeRollover" type="bool" defaultValue="false"/>
<attribute name="enabled" type="bool" defaultValue="true" />
<attribute name="logSiteId" type="bool" defaultValue="true" />
<attribute name="flushByEntryCountW3CLog" type="uint" defaultValue="0" />
<attribute name="maxLogLineLength" type="uint" validationType="integerRange" validationParameter="2,65536" defaultValue="65536" />
<element name="customFields">
<attribute name="maxCustomFieldLength" type="uint" validationType="integerRange" validationParameter="2,65536" defaultValue="4096" />
<collection addElement="add" clearElement="clear">
<attribute name="logFieldName" type="string" required="true" isUniqueKey="true" validationType="nonEmptyString" />
<attribute name="sourceName" type="string" required="true" validationType="nonEmptyString" />
<attribute name="sourceType" type="enum" required="true" >
<enum name="RequestHeader" value="0"/>
<enum name="ResponseHeader" value="1"/>
<enum name="ServerVariable" value="2"/>
</attribute>
</collection>
</element>
</element>
<element name="traceFailedRequestsLogging">
<attribute name="enabled" type="bool" defaultValue="false" />
<attribute name="directory" type="string" expanded="true" defaultValue="%SystemDrive%\inetpub\logs\FailedReqLogFiles"/>
<attribute name="maxLogFiles" type="uint" defaultValue="50" validationType="integerRange" validationParameter="1,10000"/>
<attribute name="maxLogFileSizeKB" type="uint" defaultValue="1024" validationType="integerRange" validationParameter="0,1048576"/>
<attribute name="customActionsEnabled" type="bool" defaultValue="false"/>
</element>
<element name="hsts">
<attribute name="enabled" type="bool" defaultValue="false" />
<attribute name="max-age" type="uint" defaultValue="0" />
<attribute name="includeSubDomains" type="bool" defaultValue="false" />
<attribute name="preload" type="bool" defaultValue="false" />
<attribute name="redirectHttpToHttps" type="bool" defaultValue="false" />
</element>
<collection addElement="application" defaultElement="applicationDefaults" >
<attribute name="path" type="string" required="true" isUniqueKey="true" validationType="applicationPath" />
<attribute name="applicationPool" type="string" validationType="applicationPoolName"/>
<attribute name="enabledProtocols" type="string" defaultValue="http"/>
<attribute name="serviceAutoStartEnabled" type="bool" defaultValue="false" />
<attribute name="serviceAutoStartProvider" type="string" />
<attribute name="preloadEnabled" type="bool" defaultValue="false" />
<collection addElement="virtualDirectory" defaultElement="virtualDirectoryDefaults" >
<attribute name="path" type="string" isUniqueKey="true" validationType="virtualDirectoryPath" />
<attribute name="physicalPath" type="string" expanded="true" />
<attribute name="userName" type="string" />
<attribute name="password" type="string" caseSensitive="true" encrypted="true" defaultValue="[enc:IISCngProvider::enc]" />
<attribute name="logonMethod" type="enum" defaultValue="ClearText">
<enum name="Interactive" value="0"/>
<enum name="Batch" value="1"/>
<enum name="Network" value="2"/>
<enum name="ClearText" value="3"/>
</attribute>
<attribute name="allowSubDirConfig" type="bool" defaultValue="true"/>
</collection>
<element name="virtualDirectoryDefaults" isCollectionDefault="true">
<attribute name="path" type="string" validationType="virtualDirectoryPath"/>
<attribute name="physicalPath" type="string" expanded="true" />
<attribute name="userName" type="string"/>
<attribute name="password" type="string" caseSensitive="true" encrypted="true" defaultValue="[enc:IISCngProvider::enc]" />
<attribute name="logonMethod" type="enum" defaultValue="ClearText">
<enum name="Interactive" value="0"/>
<enum name="Batch" value="1"/>
<enum name="Network" value="2"/>
<enum name="ClearText" value="3"/>
</attribute>
<attribute name="allowSubDirConfig" type="bool" defaultValue="true"/>
</element>
</collection>
<element name="applicationDefaults" isCollectionDefault="true">
<attribute name="path" type="string" validationType="applicationPath"/>
<attribute name="applicationPool" type="string" validationType="applicationPoolName"/>
<attribute name="enabledProtocols" type="string" defaultValue="http"/>
<attribute name="serviceAutoStartEnabled" type="bool" defaultValue="false" />
<attribute name="serviceAutoStartProvider" type="string" />
<attribute name="preloadEnabled" type="bool" defaultValue="false" />
</element>
<element name="virtualDirectoryDefaults" isCollectionDefault="true">
<attribute name="path" type="string" validationType="virtualDirectoryPath"/>
<attribute name="physicalPath" type="string" expanded="true" />
<attribute name="userName" type="string" />
<attribute name="password" type="string" caseSensitive="true" encrypted="true" defaultValue="[enc:IISCngProvider::enc]" />
<attribute name="logonMethod" type="enum" defaultValue="ClearText">
<enum name="Interactive" value="0"/>
<enum name="Batch" value="1"/>
<enum name="Network" value="2"/>
<enum name="ClearText" value="3"/>
</attribute>
<attribute name="allowSubDirConfig" type="bool" defaultValue="true"/>
</element>
</collection>
<element name="siteDefaults" isCollectionDefault="true">
<attribute name="name" type="string" validationType="siteName" />
<attribute name="id" type="uint" />
<attribute name="serverAutoStart" type="bool" defaultValue="true" />
<element name="bindings">
<collection addElement="binding" clearElement="clear">
<attribute name="protocol" type="string" required="true" isCombinedKey="true" validationType="nonEmptyString" />
<attribute name="bindingInformation" type="string" required="true" isCombinedKey="true" validationType="nonEmptyString" />
<attribute name="sslFlags" type="uint" defaultValue="0" />
</collection>
</element>
<element name="limits">
<attribute name="maxBandwidth" type="uint" validationType="integerRange" validationParameter="0,1023,exclude" defaultValue="4294967295"/>
<attribute name="maxConnections" type="uint" defaultValue="4294967295"/>
<attribute name="connectionTimeout" type="timeSpan" defaultValue="00:02:00" validationType="timeSpanRange" validationParameter="0,65535,1"/>
<attribute name="maxUrlSegments" type="uint" validationType="integerRange" validationParameter="0,16383" defaultValue="32" />
</element>
<element name="logFile">
<attribute name="logExtFileFlags" type="flags" defaultValue="Date, Time, ClientIP, UserName, ServerIP, Method, UriStem, UriQuery, TimeTaken, HttpStatus, Win32Status, ServerPort, UserAgent, HttpSubStatus, Referer">
<flag name="Date" value="1"/>
<flag name="Time" value="2"/>
<flag name="ClientIP" value="4"/>
<flag name="UserName" value="8"/>
<flag name="SiteName" value="16"/>
<flag name="ComputerName" value="32"/>
<flag name="ServerIP" value="64"/>
<flag name="Method" value="128"/>
<flag name="UriStem" value="256"/>
<flag name="UriQuery" value="512"/>
<flag name="HttpStatus" value="1024"/>
<flag name="Win32Status" value="2048"/>
<flag name="BytesSent" value="4096"/>
<flag name="BytesRecv" value="8192"/>
<flag name="TimeTaken" value="16384"/>
<flag name="ServerPort" value="32768"/>
<flag name="UserAgent" value="65536"/>
<flag name="Cookie" value="131072"/>
<flag name="Referer" value="262144"/>
<flag name="ProtocolVersion" value="524288"/>
<flag name="Host" value="1048576"/>
<flag name="HttpSubStatus" value="2097152"/>
</attribute>
<attribute name="customLogPluginClsid" type="string" defaultValue=""/>
<attribute name="logFormat" type="enum" defaultValue="W3C">
<enum name="IIS" value="0"/>
<enum name="NCSA" value="1"/>
<enum name="W3C" value="2"/>
<enum name="Custom" value="3"/>
</attribute>
<attribute name="logTargetW3C" type="flags" defaultValue="File">
<flag name="File" value="1"/>
<flag name="ETW" value="2"/>
</attribute>
<attribute name="directory" type="string" expanded="true" defaultValue="%SystemDrive%\inetpub\logs\LogFiles"/>
<attribute name="period" type="enum" defaultValue="Daily">
<enum name="MaxSize" value="0"/>
<enum name="Daily" value="1"/>
<enum name="Weekly" value="2"/>
<enum name="Monthly" value="3"/>
<enum name="Hourly" value="4"/>
</attribute>
<attribute name="truncateSize" type="int64" defaultValue="20971520" validationType="integerRange" validationParameter="1048576,4294967295" />
<attribute name="localTimeRollover" type="bool" defaultValue="false"/>
<attribute name="enabled" type="bool" defaultValue="true" />
<attribute name="logSiteId" type="bool" defaultValue="true" />
<attribute name="flushByEntryCountW3CLog" type="uint" defaultValue="0" />
<attribute name="maxLogLineLength" type="uint" validationType="integerRange" validationParameter="2,65536" defaultValue="65536" />
<element name="customFields">
<attribute name="maxCustomFieldLength" type="uint" validationType="integerRange" validationParameter="2,65536" defaultValue="4096" />
<collection addElement="add" clearElement="clear">
<attribute name="logFieldName" type="string" required="true" isUniqueKey="true" validationType="nonEmptyString" />
<attribute name="sourceName" type="string" required="true" validationType="nonEmptyString" />
<attribute name="sourceType" type="enum" required="true" >
<enum name="RequestHeader" value="0"/>
<enum name="ResponseHeader" value="1"/>
<enum name="ServerVariable" value="2"/>
</attribute>
</collection>
</element>
</element>
<element name="traceFailedRequestsLogging">
<attribute name="enabled" type="bool" defaultValue="false" />
<attribute name="directory" type="string" expanded="true" defaultValue="%SystemDrive%\inetpub\FailedReqLogFiles"/>
<attribute name="maxLogFiles" type="uint" defaultValue="50" validationType="integerRange" validationParameter="1,10000"/>
<attribute name="maxLogFileSizeKB" type="uint" defaultValue="1024" validationType="integerRange" validationParameter="0,1048576"/>
<attribute name="customActionsEnabled" type="bool" defaultValue="false"/>
</element>
<element name="hsts">
<attribute name="enabled" type="bool" defaultValue="false" />
<attribute name="max-age" type="uint" defaultValue="0" />
<attribute name="includeSubDomains" type="bool" defaultValue="false" />
<attribute name="preload" type="bool" defaultValue="false" />
<attribute name="redirectHttpToHttps" type="bool" defaultValue="false" />
</element>
</element>
<element name="applicationDefaults" isCollectionDefault="true">
<attribute name="path" type="string" validationType="applicationPath"/>
<attribute name="applicationPool" type="string" validationType="applicationPoolName"/>
<attribute name="enabledProtocols" type="string" defaultValue="http"/>
</element>
<element name="virtualDirectoryDefaults" isCollectionDefault="true">
<attribute name="path" type="string" validationType="virtualDirectoryPath"/>
<attribute name="physicalPath" type="string" expanded="true" />
<attribute name="userName" type="string"/>
<attribute name="password" type="string" caseSensitive="true" encrypted="true" defaultValue="[enc:IISCngProvider::enc]" />
<attribute name="logonMethod" type="enum" defaultValue="ClearText">
<enum name="Interactive" value="0"/>
<enum name="Batch" value="1"/>
<enum name="Network" value="2"/>
<enum name="ClearText" value="3"/>
</attribute>
<attribute name="allowSubDirConfig" type="bool" defaultValue="true"/>
</element>
</sectionSchema>
备注
path=“.”和 path=“”具有相同的效果。 它们引用层次结构中的当前级别。