Cors 从客户端调用api时发生跨源错误

Cors 从客户端调用api时发生跨源错误,cors,fetch,Cors,Fetch,我有一个.net core api控制器设置,并在startup类中使用了如下启用的COR: 在我的configureServices功能中,我完成了以下操作: service.AddCors(c => { c.AddPolicy("AllowOrigin", options => options.AllowAnyOrigin()); { fetch(url, { method: 'POST', body: JSON.stringify(data), headers: ne

我有一个.net core api控制器设置,并在startup类中使用了如下启用的COR:

在我的configureServices功能中,我完成了以下操作:

service.AddCors(c =>
{
    c.AddPolicy("AllowOrigin", options => options.AllowAnyOrigin());
{
fetch(url, {
method: 'POST',
body: JSON.stringify(data),
headers: new Headers({
    'Content-Type': 'application/json'
}).then.....
在我的configure函数中,我完成了:
app.useCors()

在我的客户端应用程序上,我正在执行以下操作:

service.AddCors(c =>
{
    c.AddPolicy("AllowOrigin", options => options.AllowAnyOrigin());
{
fetch(url, {
method: 'POST',
body: JSON.stringify(data),
headers: new Headers({
    'Content-Type': 'application/json'
}).then.....
当我从客户端拨打电话时,我收到以下错误:

在获取时访问'http://...“起源”http://...'已被CORS策略阻止:对飞行前请求的响应未通过访问控制检查:请求的资源上不存在'access control Allow Origin'标头。如果不透明响应满足您的需要,请将请求的模式设置为“无cors”,以获取禁用cors的资源。

我的api帖子使用postman


如何从我的客户机上实现这一点?

您可以在WebApiConfig Register方法中为所有API全局配置CORS,如下所示

public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        var cors = new EnableCorsAttribute("www.example.com", "*", "*");
        config.EnableCors(cors);
        // ...
    }
}
[EnableCors(origins: "http://www.example.com", headers: "*", methods: "get,post")]
public class TestController : ApiController
{
    public HttpResponseMessage Get() { ... }
    public HttpResponseMessage Post() { ... }
    public HttpResponseMessage Put() { ... }    
}
或者在API控制器级别,用EnableCors属性修饰它,如下所示

public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        var cors = new EnableCorsAttribute("www.example.com", "*", "*");
        config.EnableCors(cors);
        // ...
    }
}
[EnableCors(origins: "http://www.example.com", headers: "*", methods: "get,post")]
public class TestController : ApiController
{
    public HttpResponseMessage Get() { ... }
    public HttpResponseMessage Post() { ... }
    public HttpResponseMessage Put() { ... }    
}

要了解更多细节,请遵循

不是答案,但我正在阅读。底部写着“当部署到IIS时,CORS必须在Windows身份验证之前运行”,你注意到了吗?我不是专家,只是觉得需要检查一下。我没有在api上使用任何身份验证。我正在通过VisualStudio运行iis express。我正在使用.NETCore3.1。我会试试看。如果您使用的是ASP.NET core 3.1,请按照我之前使用过的链接进行操作,并取得了进展,但随后出现了另一个错误:
415(不支持的媒体类型)
。现在我需要弄清楚。看起来415错误取决于内容类型或编码