我有一个asp.net核心API,我正试图从该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();
}
关于我可能做错了什么的任何想法?
答案 0 :(得分:1)
我以前有这个问题。我发现解决该问题的唯一方法是显式列出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
请求显式添加到允许的方法中,该请求甚至在到达我的代码之前都被自动拒绝。