c# - 从 asp.net core 应用程序发出 DELETE 请求时出现 405 错误

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

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

这是我的删除端点:

    [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 中的配置服务和配置方法:

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();
}

关于我可能做错了什么有什么想法吗?

最佳答案

我以前也遇到过这个问题。我发现解决这个问题的唯一方法是显式列出 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 请求显式添加到允许的方法中,该请求在到达我的代码之前就被自动拒绝。

关于c# - 从 asp.net core 应用程序发出 DELETE 请求时出现 405 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55736265/

相关文章:

c# - 尝试创建 Azure 服务总线队列时出现访问错误

c# - 从 Web 的 XML 文件中获取值

c# - 如何使用 WCF Web Api 将集成身份验证用户传递到另一个 Web 服务

powershell - 执行 invoke-webrequest 以获取 Powershell 中多个网站的状态

angularjs - 带有 Angular CLI 和实时重新加载的 ASP.NET Core

c# - 尝试编译时出现C#错误

c# - Selenium RC fireEvent() 在 C# 中不起作用

c# - IIS 7.5 和 ASP.NET 凭据

ASP.NET vNext 全局配置访问

c# - 如何更新 dot net core 中的子 nuget 包