Bad Request - Invalid Hostname

539 阅读2分钟

问题背景

VS2019开发.Net项目,在本地调试的时候,使用localhost可以正常访问接口,但通过127.0.0.1IP访问接口失败。提示 HTTP Error 400. The request hostname is invalid.

报错截图:

image.png

解决方案

修改applicationhost.config 配置文件

  1. 配置文件路径

配置文件路径一般在当前解决方案的根目录,有一个隐藏文件夹 .vs , 找到.vs下的项目名称xxx下的config文件夹,里面有一个 applicationhost.config 文件。完整路径为:.vs\xxx\config\applicationhost.config

  1. 打开配置文件

image.png

  1. 修改配置

打开配置文件 applicationhost.config,找到里面的 sites 节点,在对应的项目的 bindings 节点下增加 ip 相关的配置。增加以下配置信息

image.png

参考附录

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=“”具有相同的效果。 它们引用层次结构中的当前级别。