CORS 错误仅适用于一个控制器
Posted
技术标签:
【中文标题】CORS 错误仅适用于一个控制器【英文标题】:CORS error working only for one controller 【发布时间】:2020-06-02 06:14:14 【问题描述】:我正在开发一个 dotnet core web api。
我的 API 托管在 localhost:44366 我的客户端应用程序托管在http://127.0.0.1:5501/(使用 vs code 实时服务器)
我正在使用提交按钮发出两个 POST 请求 以前我在发出 一个 POST 请求时遇到以下问题:
Access to XMLHttpRequest at 'https://localhost:44366/api/surveycreatoroptions' from origin
'http://127.0.0.1:5501' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is
present on the requested resource.
我在两个控制器上都尝试了 [EnableCors("AllowMyOrigin")] 方法。
它适用于第一个请求,但不适用于第二个请求(给出相同的错误)
这是我用于启用 CORS 的内容
services.AddCors(options =>
options.AddPolicy("AllowMyOrigin",
builder => builder.WithOrigins("http://127.0.0.1:5501").AllowAnyMethod().AllowAnyHeader())
;
);
我怎样才能使它适用于这两个请求。
【问题讨论】:
你能在 Startup.cs 的 Configure 和 ConfigureServices() 中显示你的代码吗? 【参考方案1】:您可以在 ConfigureServices 方法中使用以下代码
services.AddCors(options =>
options.AddPolicy("CorsPolicy",
builder => builder.AllowAnyOrigin()
.AllowAnyMethod()
.AllowAnyHeader()
.AllowCredentials());
);
并在配置方法中使用
app.UseCors("CorsPolicy");
【讨论】:
【参考方案2】:我遇到了你的问题。为了解决这个问题,首先将此代码添加到 startup.cs
public void ConfigureServices(IServiceCollection services)
services.AddCors(o => o.AddPolicy("MyPolicy", builder =>
builder.AllowAnyMethod()
.AllowAnyHeader()
.AllowAnyOrigin()
.AllowCredentials();
));
services.Configure<MvcOptions>(options =>
options.Filters.Add(new CorsAuthorizationFilterFactory("MyPolicy"));
);
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory, DiagnosticListener diagnosticListenerSource, DiagnosticObserver diagnosticObserver)
app.UseCors("MyPolicy");
那么“Access-Control-Allow-Origin”应该添加到api发送请求头中。
打字稿示例:
fetch(window.appSettings.API_URL + path,
redirect: 'follow',
method,
body: data === null ? null : JSON.stringify(data),
headers:
Accept: 'application/json',
'Content-Type': 'application/json',
'Access-Control-Allow-Origin': '*',
Authorization: 'Bearer ' + bToken,
,
);
出于安全考虑,您可以更改来源
【讨论】:
【参考方案3】:试试这个代码,看看它是否适合你
public void ConfigureServices(IServiceCollection services)
services.AddCors();
services.AddMvc();
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
app.UseCors(
options => options.AllowAnyOrigin().AllowAnyMethod().AllowAnyHeader()
);
app.UseMvc();
【讨论】:
以上是关于CORS 错误仅适用于一个控制器的主要内容,如果未能解决你的问题,请参考以下文章
对象 addSubview 仅适用于 viewDidLoad
UIScrollView 是不是仅适用于嵌入在导航控件中的视图控制器?
titleView 仅适用于一个视图控制器(self.navigationController 为 nil)