从 asp.net 核心应用程序发出 DELETE 请求时出现 405 错误
Posted
技术标签:
【中文标题】从 asp.net 核心应用程序发出 DELETE 请求时出现 405 错误【英文标题】:Getting 405 error when making a DELETE request from an asp.net core app 【发布时间】: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。
【参考方案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
请求显式添加到允许的方法中,该请求甚至在到达我的代码之前就被自动拒绝了。
【讨论】:
以上是关于从 asp.net 核心应用程序发出 DELETE 请求时出现 405 错误的主要内容,如果未能解决你的问题,请参考以下文章
如何从axios.post发送简单的值到asp.net核心?
ASP.NET Core Web API DELETE 调用返回 405
Angular 4 对 asp.net 核心 API 的请求(在标头中使用授权)不起作用
使用引导日期选择器在 ASP.net 核心中发布本地化的日期格式