ASP.NET Core Web API에서 원본 간 리소스 공유를 활성화하려고하는데 문제가 있습니다.
EnableCors
속성은 받아들이 policyName
유형의 string
매개 변수 :
// Summary:
// Creates a new instance of the Microsoft.AspNetCore.Cors.Core.EnableCorsAttribute.
//
// Parameters:
// policyName:
// The name of the policy to be applied.
public EnableCorsAttribute(string policyName);
ASP.NET Core Web API에서 CORS 를 policyName
의미하는 방법과 의미 는 무엇입니까 ?
답변
다음 ConfigureServices
방법으로 응용 프로그램 시작시 CORS 정책을 구성해야합니다 .
public void ConfigureServices(IServiceCollection services)
{
services.AddCors(o => o.AddPolicy("MyPolicy", builder =>
{
builder.AllowAnyOrigin()
.AllowAnyMethod()
.AllowAnyHeader();
}));
// ...
}
CorsPolicyBuilder
인은 builder
당신이 당신의 요구에 정책을 구성 할 수 있습니다. 이제이 이름을 사용하여 정책을 컨트롤러 및 작업에 적용 할 수 있습니다.
[EnableCors("MyPolicy")]
또는 모든 요청에 적용하십시오.
public void Configure(IApplicationBuilder app)
{
app.UseCors("MyPolicy");
// ...
// This should always be called last to ensure that
// middleware is registered in the correct order.
app.UseMvc();
}
답변
.NET Core 1 및 .Net Core 2에 적용
사용하는 경우 .Net-Core 1.1
불행히도 문서는이 특정 경우에 매우 혼란 스럽습니다. 그래서 나는 그것을 간단하게 만들 것입니다 :
Microsoft.AspNetCore.Cors
프로젝트에 너겟 패키지 추가- 에서
ConfigureServices
방법 추가services.AddCors();
-
에서
Configure
방법 호출하기 전에app.UseMvc()
및app.UseStaticFiles()
추가 :app.UseCors(builder => builder .AllowAnyOrigin() .AllowAnyMethod() .AllowAnyHeader() .AllowCredentials());
그게 다야. 모든 클라이언트는 ASP.NET Core 웹 사이트 / API에 액세스 할 수 있습니다.
사용하는 경우 .Net-Core 2.0
Microsoft.AspNetCore.Cors
프로젝트에 너겟 패키지 추가-
에
ConfigureServices
방법 전에 호출services.AddMvc()
추가 :services.AddCors(options => { options.AddPolicy("AllowAll", builder => { builder .AllowAnyOrigin() .AllowAnyMethod() .AllowAnyHeader() .AllowCredentials(); }); });
-
(중요) 에서
Configure
방법, 전에 호출app.UseMvc()
, 추가app.UseCors("AllowAll");
AllowAll
app.UserCors에서 언급해야하는 정책 이름입니다. 어떤 이름이든 될 수 있습니다.
답변
Henk의 답변을 바탕으로 특정 도메인, 허용하려는 방법 및 CORS를 활성화하려는 헤더를 생각해 냈습니다.
public void ConfigureServices(IServiceCollection services)
{
services.AddCors(options =>
options.AddPolicy("AllowSpecific", p => p.WithOrigins("http://localhost:1233")
.WithMethods("GET")
.WithHeaders("name")));
services.AddMvc();
}
용법:
[EnableCors("AllowSpecific")]
답변
특히 SignalR이 포함 된 닷넷 코어 2.2에서는 반드시 변경해야합니다
.WithOrigins("http://localhost:3000")
또는
.SetIsOriginAllowed(isOriginAllowed: _ => true) //for all origins
대신 .AllowAnyOrigin()
에.AllowCredentials()
https://trailheadtechnology.com/breaking-change-in-aspnetcore-2-2-for-signalr-and-cors/
답변
IIS에서 호스팅하는 경우 IIS가 OPTIONS
동사를 차단하기 때문에이 문제가 발생할 수 있습니다 . 이 때문에 거의 한 시간을 보냈습니다.
정보 표시 중 하나는 요청 404
하는 동안 오류 가 발생 했다는 것입니다 OPTIONS
.
이 문제를 해결하려면 요청 을 차단 하지 않도록 IIS에 명시 적으로 지시해야합니다 OPTIONS
.
요청 필터링으로 이동하십시오.
옵션이 허용되는지 확인하십시오.
또는 web.config
다음 설정 으로을 만드십시오 .
<system.webServer>
<security>
<requestFiltering>
<verbs>
<remove verb="OPTIONS" />
<add verb="OPTIONS" allowed="true" />
</verbs>
</requestFiltering>
</security>
</system.webServer>
답변
Startup.cs 클래스에서 구성해야합니다
services.AddCors(options =>
{
options.AddPolicy("CorsPolicy",
builder => builder.AllowAnyOrigin()
.AllowAnyMethod()
.AllowAnyHeader()
.AllowCredentials());
});
답변
`
public void ConfigureServices(IServiceCollection services)
{
services.AddCors(options =>
{
options.AddPolicy("AllowAnyOrigin",
builder => builder
.AllowAnyOrigin()
.AllowAnyMethod()
.AllowAnyHeader());
});
services.Configure<MvcOptions>(options => {
options.Filters.Add(new CorsAuthorizationFilterFactory("AllowAnyOrigin"));
});
}
`