IIS 10 上的 .NET Core 8 站点拒绝 PATCH、PUT、DELETE 请求

问题描述 投票:0回答:1

我一直在向 .NET Core 8 网站添加 API。当我在 Visual Studio 中的 IIS Express 中本地运行它时,所有 PATCH、PUT 和 DELETE 请求均有效。当我部署到服务器上的 IIS 10 时,它们被拒绝,返回 404(而不是 405)。这些请求确实记录在 IIS 日志中,更具体地说,这表明错误是 404.6(未找到 - 请求过滤模块配置为拒绝 HTTP 谓词)。

GET 和 POST 请求一如既往地成功。

我已经通过在线研究对

web.config
进行了所有可以找到的调整,但无济于事 - 删除了 WebDAV,删除并读取了
aspNetCore
ExtensionlessUrlHandler-Integrated-4.0
处理程序,并拼写出了完整的动词列表。我尝试添加的一项内容是
<security>
部分中的以下内容,但我将其删除,因为只要其中有任何
add
标签,该网站就不会重新启动。

<requestFiltering>
  <verbs>
    <add verb="GET" allowed="true" />
    <add verb="HEAD" allowed="true" />
    <add verb="POST" allowed="true" />
    <add verb="PUT" allowed="true" />
    <add verb="PATCH" allowed="true" />
    <add verb="DELETE" allowed="true" />
    <add verb="OPTIONS" allowed="true" />
  </verbs>
</requestFiltering>

我尝试在冗余添加中的

<remove>
之前添加相应的
<add>
标签,但这没有帮助。只要
<requestFiltering>
部分为空,
<verbs>
<verbs>
标签就不会造成任何问题。

所以这就是我剩下的。有人能想出其他方法来尝试吗?

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <location path="." inheritInChildApplications="false">
        <system.web>
            <httpCookies httpOnlyCookies="true" />  
        </system.web>
        <system.webServer>
            <modules runAllManagedModulesForAllRequests="true">
                <remove name="WebDAVModule" />
            </modules>
            <httpProtocol>
                <customHeaders>
                    <add name="X-Content-Type-Options" value="nosniff" />
                    <add name="Content-Security-Policy" value="script-src 'self' 'unsafe-hashes' 'sha256-[...]/[...]';" />
                    <add name="Referrer-Policy" value="same-origin" />
                </customHeaders>
            </httpProtocol>
            <rewrite>
                <outboundRules>
                    <rule name="Use only secure cookies" preCondition="Unsecured cookie">
                        <match serverVariable="RESPONSE_SET_COOKIE" pattern=".*" negate="false" />
                        <action type="Rewrite" value="{R:0}; secure" />
                    </rule>
                    <preConditions>
                        <preCondition name="Unsecured cookie">
                            <add input="{RESPONSE_SET_COOKIE}" pattern="." />
                            <add input="{RESPONSE_SET_COOKIE}" pattern="; secure" negate="true" />
                        </preCondition>
                    </preConditions>
                </outboundRules>
            </rewrite>
            <handlers>
                <remove name="WebDAV" />
                <remove name="WebAdminHandler-Integrated" />
                <remove name="aspNetCore" />
                <add name="aspNetCore" path="*" verb="GET,HEAD,POST,PUT,PATCH,DELETE,OPTIONS" modules="AspNetCoreModuleV2" resourceType="Unspecified" requireAccess="Script" />
                <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
                <add name="ExtensionlessUrlHandler-Integrated-4.0"
                    path="*."
                    verb="GET,HEAD,POST,PUT,PATCH,DELETE,OPTIONS"
                    type="System.Web.Handlers.TransferRequestHandler"
                    preCondition="integratedMode,runtimeVersionv4.0" />
            </handlers>
            <aspNetCore processPath="dotnet" arguments=".\Frb.Mispl.dll" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" hostingModel="inprocess">
                <environmentVariables>
                    <environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Development" />
                </environmentVariables>
            </aspNetCore>
            <security>
                <authentication>
                    <anonymousAuthentication enabled="true" />
                    <windowsAuthentication enabled="false" />
                </authentication>
            </security>
        </system.webServer>
    </location>
</configuration>
http iis http-method
1个回答
1
投票

我决定查看我自己计算机的 applicationHost.config(由 Visual Studio 运行的 IIS Express 使用),看看是否有任何线索,我在

<security>
部分发现,

<requestFiltering>
  <verbs allowUnlisted="true" applyToWebDAV="false" />
</requestFiltering>

我将其添加到服务器上的

web.config
,我的请求开始起作用。在我回滚我尝试过的所有其他更改后,它们继续工作。

© www.soinside.com 2019 - 2024. All rights reserved.