이것은 How does Access-Control-Allow-Origin header work?의 복제본이 될 수 있지만 그 방법도 저를 위해 작동하지 않습니다. 내가 뭔가를 놓치기를 바라고있어..NET 코어 UseCors()는 헤더를 추가하지 않습니다
AJAX를 통해 액세스하고있는 .NET Core Web API에서 내 응답에 Access-Control-Allow-Origin
헤더를 가져 오려고합니다.
나는 여러 가지를 시도했다. 별도로 명시하지 않는 한 모두가 Startup.cs
파일에 있습니다. Microsoft Documentation 당으로 방법 1
:
public void ConfigureServices(IServiceCollection services)
{
// Add database
services.AddDbContext<DbContext>(options => options.UseSqlServer(Configuration.GetConnectionString("DbConnection")));
// Add the ability to use the API with JSON
services.AddCors();
// Add framework services.
services.AddMvc();
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
loggerFactory.AddConsole(Configuration.GetSection("Logging"));
loggerFactory.AddDebug();
if (env.IsDevelopment())
{
using (var serviceScope = app.ApplicationServices.GetRequiredService<IServiceScopeFactory>().CreateScope())
{
serviceScope.ServiceProvider.GetService<DbContext>().Database.Migrate();
serviceScope.ServiceProvider.GetService<DbContext>().EnsureSeedData();
}
}
app.UseCors(builder => builder.WithOrigins("https://localhost:44306").AllowAnyMethod());
app.UseJwtBearerAuthentication(new JwtBearerOptions
{
Authority = Configuration["Authentication:AzureAd:AADInstance"] + Configuration["Authentication:AzureAd:TenantId"],
Audience = Configuration["Authentication:AzureAd:Audience"],
});
app.UseMvc();
}
방법은 2
public void ConfigureServices(IServiceCollection services)
{
// ...
services.AddCors(options => options.AddPolicy("AllowWebApp",
builder => builder.AllowAnyMethod()
.AllowAnyMethod()
.AllowAnyOrigin()));
//.WithOrigins("https://localhost:44306")));
// ...
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
// ...
app.UseCors("AllowWebApp");
// ...
}
나는 또한 컨트롤러 및 방법 모두에 [EnableCors("AllowWebApp")]
를 추가하는 시도했습니다. 우체부에서
, 내가 얻을 :
컨텐츠 인코딩 → GZIP
콘텐츠 유형 → 텍스트/일반; 문자셋 = UTF-8
날짜 2017년 (수) 1월 25일 → 그리니치 표준시 04시 51분 48초
서버 황조롱이
→ 상태 → 200
다를 → 수락 인코딩
X가 구동 -에 의해
→ ASP.NET x-sourcefiles → =? UTF-8? B? [재실행]
나는 크롬에서도 비슷한 헤더를 사용했습니다.
액세스하려는 메소드에 Authorize
속성이 있습니다. 하지만 그 부분은 정상적으로 작동해야합니다 (적어도 좋은 응답을 얻고 있습니다).
그래서 나는 아주 분명한 것을 놓치고 있습니까? 현재 버전 1.1.0을 실행 중입니다. 베어러 인증을 이용하여 (또는 I가 상상) 때 JS 컨트롤러 스텁을 추가
편집
function getContactPreviews(resultsCallback) {
var xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange =() => {
if (xmlhttp.readyState == XMLHttpRequest.DONE && xmlhttp.status == 200) {
resultsCallback(JSON.parse(xmlhttp.response));
}
}
xmlhttp.open("GET", "https://localhost:44357/api/User/ContactsPreview", true);
xmlhttp.setRequestHeader("Authorization", "Bearer " + localStorage.getItem("AuthorizationToken"));
xmlhttp.send();
}
컨트롤러 스텁
[Authorize]
[Route("api/[controller]")]
public class UserController : ApiController
{
[HttpGet(nameof(ContactsPreview))]
[EnableCors("AllowWebApp")]
public IEnumerable<Customer> ContactsPreview()
{
// ...
}
}
어떻게 우편 배달부로 서버를 치십니까? 헤더는 OPTIONS 요청 – Rob
@Rob에 대해서만 반환됩니다. 그게 내가 놓친거야. Postman 측에서는 (크롬에서 시도해 보았지만 올바른 방법을 사용하고있었습니다.) 컨트롤러 쪽에서는 더 그렇습니다. 나는 [HttpOptions] 대신'[HttpGet]'을 사용했다. 나는 그런 느낌이 들었어. – David
@Rob 그러나 Chrome은 여전히 실패하고 있습니다. 204 오류가 발생했습니다. 우편 배달부는 완벽하게 작동합니다. 둘 다 동일한 무기명 토큰을 사용하고 있습니다. Chrome에서 캐시가 사용 중지되었습니다. – David