ChatGPT解决这个技术问题 Extra ChatGPT

带有 IIS 的 ASP.NET Core - 不允许使用 HTTP 动词

我们有一个 ASP.NET Core 2.0 网站,它还提供了几个简单的 Web API 方法,用于增强 UI。

Web API 调用在 IIS Express 下本地运行时按预期工作,但是当我们部署到我们的 IIS 8.5 生产 Web 服务器时,我们得到发出 HTTP DELETEPUT 请求时出现以下错误...

405 Method Not Allowed

经过一些网络搜索,我们发现了几篇建议删除 IIS WebDAV 模块的帖子。我们在 IIS 中禁用了它(它是我们的服务器),我们还尝试了以下方法:

禁用的 WebDAV

启用 WebDev 并设置 Allow verb filtering = False

将处理程序映射设置为允许请求限制设置中的所有动词:aspNetCore、WebDAV 和 ExtensionlessUrlHandler-Integrated-4.0

以上步骤都没有解决我们的问题。

任何建议/方向将不胜感激。


M
Manuel Alves

这对我有用(netcore 2.0)

在这里找到:https://www.ryadel.com/en/error-405-methods-not-allowed-asp-net-core-put-delete-requests/


它有效,但这使我的网站在 .net core 2.1 RC 中变得如此缓慢,我不得不删除此指令
@Alexandre 此设置实际上应该只对服务站点是必需的。默认情况下,网站应该响应 GET 和 POST,并且真的不需要其他任何东西。如果您正在对您的网站进行 REST 调用,我建议将这些调用卸载到可以单独管理的子应用程序和应用程序池。
我在我的 .NET 5 应用程序上尝试了所有内容,这修复了它。我正在做一个托管在 Blazor Web 服务器上的 Blazor WASM 应用程序。我终于可以将所有内容部署到 Azure,它的工作方式与本地一样。谢谢你。
N
Neilski

经过数小时的研究和反复试验,修复似乎非常简单。将 Web.config 文件添加到您的 .NET Core 2.0 应用程序:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <!-- To customize the asp.net core module uncomment and edit the following section. 
         For more info see https://go.microsoft.com/fwlink/?linkid=838655 -->
    <system.webServer>
        <modules>
            <remove name="WebDAVModule" />
        </modules>
        <handlers>
            <remove name="aspNetCore" />
            <remove name="WebDAV" />
            <!-- I removed the following handlers too, but these
                 can probably be ignored for most installations -->
            <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
            <remove name="OPTIONSVerbHandler" />
            <remove name="TRACEVerbHandler" />

            <add name="aspNetCore" 
                 path="*" 
                 verb="*" 
                 modules="AspNetCoreModule" 
                 resourceType="Unspecified" />
        </handlers>
        <aspNetCore processPath="%LAUNCHER_PATH%" 
                    arguments="%LAUNCHER_ARGS%" 
                    stdoutLogEnabled="false"
                    stdoutLogFile=".\logs\stdout" />
    </system.webServer>
</configuration>

希望这可以帮助。


如果我尝试使用 web.config 文件进行发布,我只会在发布过程即将结束时收到错误消息。我在别处读到 ASP.NET Core 2.0 不再支持 web.config 文件。有任何想法吗?
您如何发布 - 在 Visual Studio、VSTS 或其他方式中?如下所述,我们在 IIS 8.5 和 .NET Core 2.0 中运行没有问题。
@DickieWatkins,在我的例子中,使用 Asp.Net Core 2.1,并从 Visual Studio 进行部署,作为部署过程的一部分,web.config 在服务器上自动生成。如果您只是获取该文件,将其复制到您的项目中,添加 <modules><remove name="WebDAVModule"/></modules> 如此答案所示,然后只需将构建规则设置为“始终复制”,那么在未来的部署中将使用相同的 webconfig,但附加到自动地。但是,这可能取决于您的部署方法以及您是否正在运行 IIS。
非常感谢,我花了半天时间才意识到我的服务器有问题,而 iis 是问题,而不是应用程序本身
我正在使用 Kestrel,此解决方案适用吗?
J
JTech

虽然删除 WebDAV 可能会解决您的问题,但您可能想知道(就像我一样),WebDAV 是什么以及它的用途是什么?

我发现这个页面有助于解释它:

https://www.cloudwards.net/what-is-webdav/


Y
Yush0

要完全阻止 WebDav 启用,请从 ApplicationHost.config 中删除以下条目:

<add name="WebDAVModule" /> 

该条目位于模块部分。

配置的确切位置:C:\Windows\System32\inetsrv\config\applicationHost.config

这在 .Net Core 2.1 中对我很有效


最好添加“删除”节点;如曼努埃尔阿尔维斯的回答所示。如果您的应用是子应用,它仍然可以从父 web.config 中获取此设置。所选答案的代码比技术上简单地允许所有动词所需的代码要多得多。
@iGanja:根据部署过程,web.config 会被覆盖,或者您根本不想在 .net 核心中与它搏斗。为了安全起见,建议不要在网络服务器范围内添加未使用的功能。
u
uthayathasan

从 IIS 服务器中删除 WebDAV 发布。它属于 Internet 信息服务 -> 通用 Http 功能

https://ignas.me/tech/405-method-not-allowed-iis/


控制面板 -> 卸载程序 -> 打开或关闭 Windows 功能 -> IIS -> 万维网服务 -> 通用 HTTP 功能 -> WebDAV 发布。
C
Crystoline

将以下行添加到您的 web.config 文件中。这样做。

https://i.stack.imgur.com/wy4cO.png

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <location path="." inheritInChildApplications="false">
    <system.webServer>
        <modules>
            <remove name="WebDAVModule" />
        </modules>
      <handlers>
      
            <remove name="WebDAV" />
            <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
            <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET,HEAD,POST,PUT,DELETE,DEBUG" type="System.Web.Handlers.TransferRequestHandler" resourceType="Unspecified" requireAccess="Script" preCondition="integratedMode,runtimeVersionv4.0" responseBufferLimit="0" />
            
            <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" />
      </handlers>
      <aspNetCore processPath="dotnet" arguments=".\Ftms.dll" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" hostingModel="inprocess" />
    </system.webServer>
  </location>
</configuration>

s
sasi reka

就我而言,.Net 5 Web API PUT 和 DELETE 调用出现 405 错误。我尝试了多种解决方案,例如删除 WebDAV(打开或关闭 Windows 功能 -> IIS -> 万维网服务 -> 通用 HTTP 功能 -> WebDAV 发布)不起作用,在“处理程序映射”中编辑 WebDAV 条目会弄乱应用程序.

解决方案

在 IIS 中,选择应用程序

添加规则以允许请求过滤中的 HTTP 动词(但仅此一项不起作用)。转到“模块”,然后选择“WebDAV 发布”模块并将其删除。转到“处理程序映射”,然后选择“WebDAV”并将其删除。在 cmd 中运行 IISRESET


对我来说,使用 .NET 5,只需执行第 2 步和第 3 步即可解决问题。非常感谢
S
Stack Overflow

就我而言,我在将 requireAccess="None" 添加到 aspNetCore 处理程序后解决了这个问题

像这样 :

<add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" requireAccess="None" />

我将此添加到 web.config 并且它有效。谢谢
E
Eric

对我来说,在我注意到我试图发布到客户端域而不是 API 之后,我解决了这个问题。 [捂脸]


M
Mateusz Stępniak

我什至在 IIS 的 Handler Mappings 下都没有 aspnetcore 的映射。它让我打开 Visual Studio Installer 并在 .NET 跨平台开发下安装开发时 IIS 支持。然后,aspnetcore 处理程序映射出现在 IIS 中。

https://i.stack.imgur.com/286b6.png


M
M Arslan Riaz

要完全阻止 WebDav 启用,请从 ApplicationHost.config 中删除或注释以下条目:

<add name="WebDAVModule" />

该条目位于模块部分。

配置的确切位置:C:\Windows\System32\inetsrv\config\applicationHost.config

这在 .Net Core 2.2 中对我来说效果很好