【问题标题】:Getting 405 error when making a DELETE request from an asp.net core app从 asp.net 核心应用程序发出 DELETE 请求时出现 405 错误
【发布时间】:2019-09-08 05:09:19
【问题描述】:

我有一个 asp.net 核心 API,我试图从它向另一个 asp.net 核心 API 发出 DELETE 请求。当我调用第一个 API 时,我在对第二个 API 进行删除调用时收到 405 错误。我已经尝试过这里找到的解决方案; ASP.NET Core with IIS - HTTP Verb Not Allowed 和其他几个相关的解决方案都没有成功。我还在我的 Startup.cs 文件中尝试了Enabling Cross-Origin Requests (CORS),但似乎没有任何改变。

这是我的删除端点:

    [HttpDelete("MyDeleteEndpoint")]
    public async Task MyDeleteEndpoint([FromRoute] string id)
    {
        var http = new HttpClient();

        var response = await http.DeleteAsync("https://myserver:443/api/mycontroller/{id});

        //do more stuff
    }    

这是我的 web.config:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.webServer>
    <modules runAllManagedModulesForAllRequests="false">
      <remove name="WebDAVModule" />
    </modules>
  </system.webServer>
</configuration>  

这是我在 Startup.cs 中的 ConfigureServices 和 Configure 方法:

public void ConfigureServices(IServiceCollection services)
{
  services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);

  services.AddCors(options =>
  {
      options.AddPolicy("mypolicy",
      builder =>
      {
          builder.AllowAnyOrigin().AllowAnyHeader().AllowAnyMethod();
      });
  });
}

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }
    else
    {
    // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
         app.UseHsts();
    }

    app.UseCors("mypolicy");
    app.UseHttpsRedirection();
    app.UseMvc();
}

关于我可能做错的任何想法?

【问题讨论】:

  • 详细的错误信息是什么?你在第二个api项目中配置services.AddCors了吗?您需要在要向其发送请求的 api 中配置 cors。

标签: c# iis asp.net-core http-status-code-405


【解决方案1】:

如果您的应用程序托管在 IIS 下,请将此行包含在 Web.Config 文件中

<configuration> 
    <system.webServer>
        <modules>
       <remove name="WebDAVModule" />
        </modules>
    </system.webServer>
</configuration>

【讨论】:

    【解决方案2】:

    我以前遇到过这个问题。我发现解决它的唯一方法是明确列出web.config 中允许的方法。

    这是web.config 的摘录。请注意,您可能不想要所有这些设置,但为了简洁起见,我将它们保留:

    ...
    <httpProtocol>
      <customHeaders>
        <remove name="X-Powered-By" />
        <add name="Access-Control-Allow-Origin" value="*" />
        <add name="Access-Control-Allow-Credentials" value="true" />
        <add name="Access-Control-Allow-Methods" value="GET,PUT,POST,DELETE,OPTIONS" />
        <add name="Access-Control-Allow-Headers" value="authorization,content-type" />
      </customHeaders>
    </httpProtocol>
    ...
    

    如果没有将DELETE 请求显式添加到允许的方法中,该请求甚至在到达我的代码之前就被自动拒绝了。

    【讨论】:

      猜你喜欢
      • 2010-12-18
      • 2019-04-20
      • 1970-01-01
      • 1970-01-01
      • 2020-04-24
      • 2014-12-04
      • 1970-01-01
      • 2022-08-18
      • 2019-09-05
      相关资源
      最近更新 更多