我遇到了一个奇怪的问题。
在我们的应用程序中,我有一个控制器,其中 PUT、DELETE、POST 出现 405 错误 而其余控制器工作正常。
这是我的 Web.Config 的样子:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<location path="." inheritInChildApplications="false">
<system.webServer>
<handlers>
<add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" />
<remove name="WebDAV"/>
</handlers>
<modules runAllManagedModulesForAllRequests="true">
<remove name="WebDAVModule"/>
</modules>
<aspNetCore processPath="dotnet"
arguments=".\WebUI.dll"
stdoutLogEnabled="false"
stdoutLogFile=".\logs\stdout"
hostingModel="inprocess" />
<httpProtocol>
<customHeaders>
<clear />
<add name="Access-Control-Expose-Headers " value="*"/>
<add name="Access-Control-Allow-Origin" value="*" />
<add name="Access-Control-Allow-Methods" value="*" />
<add name="Access-Control-Allow-Headers" value="*" />
<remove name="X-Powered-By" />
</customHeaders>
</httpProtocol>
</system.webServer>
</location>
</configuration>
<!--ProjectGuid: B10BA5B4-B02C-4528-9272-8478A9F7B038-->
这是我的startup.cs
// configure services
#region CORS
services.AddCors(options =>
{
options.AddPolicy(
AllowedOrigins,
builder =>
{
builder.AllowAnyOrigin()
.AllowAnyHeader()
.AllowAnyMethod();
});
});
#endregion
// under configure
app.UseCors(AllowedOrigins);
从控制器我得到这个响应头:
Access-Control-Allow-Headers: *
Access-Control-Allow-Methods: *
Access-Control-Allow-Origin: *
Access-Control-Allow-Origin: *
Access-Control-Expose-Headers: *
Allow: GET, HEAD
Cache-Control: no-cache,no-store
Date: Thu, 07 Nov 2024 09:44:21 GMT
Expires: -1
Pragma: no-cache
Server: Microsoft-IIS/8.5
Transfer-Encoding: chunked
L'erreur 405 indique qu'une method HTTP (comme PUT, DELETE ou POST) n'est pas autorisée pour une certaine ressource, et cela peutprovir de plusieursfaceurs, y compris la servering Web, le control or les regles CORS。请通过验证和调整来解决问题:
配置 WebDAV 双重验证 :
Web.config
中使用 <remove name="WebDAV"/>
和 <remove name="WebDAVModule"/>
,某些配置将默认应用到 PUT 和 DELETE 中。验证其他规则
Web.config
:
在
<httpProtocol>
部分,您可以配置 Access-Control-Allow-Methods
、Access-Control-Allow-Headers
和 Access-Control-Allow-Origin
等所有内容,可以使用 *
中的特定方法进行明确。
修改
Access-Control-Allow-Methods
来详细说明所需的方法 (GET, POST, PUT, DELETE
) :
<add name="Access-Control-Allow-Methods" value="GET, POST, PUT, DELETE" />
通过 CORS 进行验证
Startup.cs
:
Votre 配置 CORS 组合正确,可验证政治名称 (
AllowedOrigins
) est bien défini en haut du fichier Startup.cs
并通过更正 app.UseCors(AllowedOrigins)
。
无政治名义的测试者论文,commesuit:
app.UseCors(builder =>
builder.AllowAnyOrigin()
.AllowAnyHeader()
.AllowAnyMethod());
控制器中的路线和动词验证:
[HttpPut]
、[HttpDelete]
等 [HttpPost]
来执行操作,就像现在一样。IIS 和模块验证 :
Web.config
sont prises en compte.响应实体检查 :
Allow: GET, HEAD
的现场,您可以使用允许的方法对我们的问题进行回复。验证 CORS 的配置以及 Web.config
的动词的自动权限以及 PUT 和 DELETE 的控制器自动权限。回顾一下,这些错误的发生是有帮助的。通过 WebDAV 或 CORS 的良好配置解决方案。