【发布时间】:2021-10-25 17:43:51
【问题描述】:
我有一个带有一些 cors-policies 的 .NET 5 API。
这是我的 CORS 设置:
public void ConfigureServices(IServiceCollection services)
{
services.AddOptions();
services.AddMemoryCache();
services.AddCors(options =>
{
options.AddPolicy("cors",
builder => builder
.WithOrigins(
"http://localhost:4200",
"http://127.0.0.1:4200",
"http://rev-staging.myhost.ch")
.WithMethods("GET", "POST", "PUT", "DELETE", "OPTIONS")
.AllowAnyHeader()
.AllowCredentials()
);
});
...
}
当然还有app.UseCors("cors");Startup.Configure(IApplicationBuilder, WebHostEnvironment )
当我在 localhost 上执行我的方法时,一切正常。
一旦我发布到api-rev-staging.myhost.ch 并在实时服务器上执行它们,对于我收到的所有 PUT 请求
CORS 已阻止从源“http://rev-staging.myhost.ch”访问“http://api-rev-staging.myhost.ch/api/v1/Vacancies/7”处的 XMLHttpRequest政策:请求的资源上不存在“Access-Control-Allow-Origin”标头。
(我更改了网址,因为它是公司网址)
所有 GET 和 POST 请求都可以工作 - 只是 PUT 请求不工作。从 http://rev-staging.myhost.ch 上的 Angular 前端执行或在我的本地计算机上从邮递员执行时,它们都不起作用 - 但 GET 和 POST 仍然有效。
知道这里有什么问题吗?
编辑:也许这很重要。后端在 IIS 上运行,与前端相同的服务器,只是另一个主机名。
【问题讨论】:
-
@gunr2171 实际上是的。因为 api- 是 API(后端),没有 api- 是角度前端。
-
我之所以这么说,是因为您在 cors 设置中使用了 rev-staging 子域,而不是 api-rev-staging 子域。呃,反正你也可以不理我,我想我知道我为什么糊涂了。
-
尝试检查您的服务器是否接受 Web API 的 PUT 和 DELETE。开箱即用这些动词被禁用:inthetechpit.com/2019/02/24/…
-
@NicolaBiada 这就是问题所在。必须编辑 web.config 并添加处理程序。感谢您的提示!
-
好的,如果你同意我复制评论作为答案
标签: c# asp.net-core cors .net-5