在web.config中设置位置路径会导致404(IIS、ASP.NET核心)

xfb7svmp  于 2022-11-12  发布在  .NET
关注(0)|答案(1)|浏览(219)

我们正在从ASP.NET迁移到ASP.NET核心。
我们需要为不同的路径配置不同的身份认证

<location path="controllerpath/method">
    <system.webServer>
        <security>
            <authentication>
                <anonymousAuthentication enabled="true" />
            </authentication>
        </security>
    </system.webServer>
</location>

但是一旦我们添加了<location path="xyz">条目,指定的路径就不再是可达的了,调用者得到一个404错误。

<location path="xyz/abc">
</location>

如果我删除了这个条目,就可以再次访问404。404直接来自IIS,因为即使应用程序无法启动(例如,所有其他调用都会导致503),通过location path指定的路径仍然会导致404。
下面是完整的web.config:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <location inheritInChildApplications="false">
    <system.webServer>
      <handlers>
        <remove name="aspNetCore"/>
        <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified"/>
      </handlers>
      <security>
        <requestFiltering>
          <requestLimits maxAllowedContentLength="52428800"/>
        </requestFiltering>
        <authorization>
          <add accessType="Allow" users="*" verbs="OPTIONS"/>
        </authorization>
      </security>
      <aspNetCore processPath="dotnet" arguments=".\assembly.dll" hostingModel="inprocess"> 
         <handlerSettings>
        <handlerSetting name="debugLevel" value="file" />
        <handlerSetting name="debugFile" value="c:\temp\ancm.log" />
     </handlerSettings>
      <environmentVariables>
        <environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Development" />
      </environmentVariables>
      </aspNetCore>
      <httpProtocol allowKeepAlive="false">
        <customHeaders>
          <remove name="X-Powered-By"/>
        </customHeaders>
      </httpProtocol>
          <directoryBrowse enabled="true"/>
          <httpCompression>
            <dynamicTypes>
              <remove mimeType="*/*"/>
              <add mimeType="*/*" enabled="true"/>
            </dynamicTypes>
          </httpCompression>
        </system.webServer>
      </location>  
        <location path="xyz/abc" allowOverride="true">        
        </location>
    </configuration>
    <!--ProjectGuid: 29529648-A3F4-44CB-827B-B6B81B00A09C-->
wi3ka0sx

wi3ka0sx1#

我找到了解决办法:
属性inheritInChildApplications="false"使处理程序没有为其他路径注册。删除该属性(或将值更改为true)后,一切都按预期工作。我猜IIS随后试图将该路径作为资源定位。

相关问题