我们有一个 ASP.NET Core 2.0 网站,它还提供了几个简单的 Web API 方法,用于增强 UI。
Web API 调用在 IIS Express 下本地运行时按预期工作,但是当我们部署到我们的 IIS 8.5 生产 Web 服务器时,我们得到发出 HTTP DELETE
和 PUT
请求时出现以下错误...
405 Method Not Allowed
经过一些网络搜索,我们发现了几篇建议删除 IIS WebDAV 模块的帖子。我们在 IIS 中禁用了它(它是我们的服务器),我们还尝试了以下方法:
禁用的 WebDAV
启用 WebDev 并设置 Allow verb filtering = False
将处理程序映射设置为允许请求限制设置中的所有动词:aspNetCore、WebDAV 和 ExtensionlessUrlHandler-Integrated-4.0
以上步骤都没有解决我们的问题。
任何建议/方向将不胜感激。
这对我有用(netcore 2.0)
在这里找到:https://www.ryadel.com/en/error-405-methods-not-allowed-asp-net-core-put-delete-requests/
经过数小时的研究和反复试验,修复似乎非常简单。将 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>
希望这可以帮助。
<modules><remove name="WebDAVModule"/></modules>
如此答案所示,然后只需将构建规则设置为“始终复制”,那么在未来的部署中将使用相同的 webconfig,但附加到自动地。但是,这可能取决于您的部署方法以及您是否正在运行 IIS。
虽然删除 WebDAV 可能会解决您的问题,但您可能想知道(就像我一样),WebDAV 是什么以及它的用途是什么?
我发现这个页面有助于解释它:
https://www.cloudwards.net/what-is-webdav/
要完全阻止 WebDav 启用,请从 ApplicationHost.config 中删除以下条目:
<add name="WebDAVModule" />
该条目位于模块部分。
配置的确切位置:C:\Windows\System32\inetsrv\config\applicationHost.config
这在 .Net Core 2.1 中对我很有效
从 IIS 服务器中删除 WebDAV 发布。它属于 Internet 信息服务 -> 通用 Http 功能
https://ignas.me/tech/405-method-not-allowed-iis/
将以下行添加到您的 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>
就我而言,.Net 5 Web API PUT 和 DELETE 调用出现 405 错误。我尝试了多种解决方案,例如删除 WebDAV(打开或关闭 Windows 功能 -> IIS -> 万维网服务 -> 通用 HTTP 功能 -> WebDAV 发布)不起作用,在“处理程序映射”中编辑 WebDAV 条目会弄乱应用程序.
解决方案
在 IIS 中,选择应用程序
添加规则以允许请求过滤中的 HTTP 动词(但仅此一项不起作用)。转到“模块”,然后选择“WebDAV 发布”模块并将其删除。转到“处理程序映射”,然后选择“WebDAV”并将其删除。在 cmd 中运行 IISRESET
就我而言,我在将 requireAccess="None"
添加到 aspNetCore
处理程序后解决了这个问题
像这样 :
<add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" requireAccess="None" />
对我来说,在我注意到我试图发布到客户端域而不是 API 之后,我解决了这个问题。 [捂脸]
我什至在 IIS 的 Handler Mappings 下都没有 aspnetcore 的映射。它让我打开 Visual Studio Installer 并在 .NET 跨平台开发下安装开发时 IIS 支持。然后,aspnetcore 处理程序映射出现在 IIS 中。
https://i.stack.imgur.com/286b6.png
要完全阻止 WebDav 启用,请从 ApplicationHost.config 中删除或注释以下条目:
<add name="WebDAVModule" />
该条目位于模块部分。
配置的确切位置:C:\Windows\System32\inetsrv\config\applicationHost.config
这在 .Net Core 2.2 中对我来说效果很好
不定期副业成功案例分享