Ошибка 405 при выполнении запроса DELETE из основного приложения asp.net - PullRequest
1 голос
/ 18 апреля 2019

У меня есть основной API asp.net, из которого я пытаюсь сделать запрос DELETE к другому базовому API asp.net.Когда я вызываю первый API, я получаю сообщение об ошибке 405, когда он вызывает удаление второго API.Я попробовал решение, найденное здесь; ASP.NET Core с IIS - HTTP-глагол не разрешен и некоторые другие связанные решения безуспешно.Я также попытался Включение запросов к исходным точкам (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>  

Вот мои ConfigureServices и мои методы Configure в 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();
}

Любые идеи о том, что я могу делать неправильно

1 Ответ

1 голос
/ 18 апреля 2019

У меня была эта проблема раньше.Единственный способ решить эту проблему, который я нашел, состоял в том, чтобы явно перечислить методы, которые были разрешены в 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 к разрешенным методам, запрос был автоматически отклонен доэто даже дошло до моего кода.

...