405 .NET 8 Web API 中的 [特定端点] 不允许使用方法

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

我遇到了一个奇怪的问题。

在我们的应用程序中,我有一个控制器,其中 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
asp.net-core .net-core iis asp.net-core-webapi iis-8
1个回答
0
投票

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。请通过验证和调整来解决问题:

  1. 配置 WebDAV 双重验证 :

    • 如果您已停用 WebDAV,请在
      Web.config
      中使用
      <remove name="WebDAV"/>
      <remove name="WebDAVModule"/>
      ,某些配置将默认应用到 PUT 和 DELETE 中。
    • 确保 WebDAV 已完成停用并验证服务器配置(在管理 IIS 中)。此外,还文章阐述了 WebDAV 文件扩展的限制。
  2. 验证其他规则

    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" />
      
  3. 通过 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());
      
  4. 控制器中的路线和动词验证

    • 确保控制操作支持所需的动词(PUT、DELETE、POST)。使用注释
      [HttpPut]
      [HttpDelete]
      [HttpPost]
      来执行操作,就像现在一样。
    • 确认应用程序的 URL 与控制器和选民应用程序的路由参数中定义的路由相对应。
  5. IIS 和模块验证 :

    • Redémarrez le server IIS pour être certain que toutes les optimizations dans
      Web.config
      sont prises en compte.
    • 在 IIS 管理器中,验证应用程序中的参数,并确保使用 PUT、DELETE 和 POST 控制方法进行操作。
  6. 响应实体检查 :

    • Allow: GET, HEAD
      的现场,您可以使用允许的方法对我们的问题进行回复。验证 CORS 的配置以及
      Web.config
      的动词的自动权限以及 PUT 和 DELETE 的控制器自动权限。

回顾一下,这些错误的发生是有帮助的。通过 WebDAV 或 CORS 的良好配置解决方案。

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