참고로 Visual Studio 2017 및 Windows 10을 사용하고 있습니다.
웹 API와 사용자 계정이있는 해당 웹 애플리케이션이 있습니다. 로그인을 시도했을 때 No Access-Control-Allow-Origin 헤더가 없다는 오류가 발생했습니다. CORS 설정 방법을 안내하는 가이드를 찾았습니다. 이것이 제가 사용한 가이드입니다.
내 WebApiConfig 파일에이 코드가 있습니다.
public static void Register(HttpConfiguration config)
{
// Web API configuration and services
// Configure Web API to use only bearer token authentication.
config.SuppressDefaultHostAuthentication();
config.Filters.Add(new HostAuthenticationFilter(OAuthDefaults.AuthenticationType));
// Web API routes
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
var cors = new EnableCorsAttribute("*", "*", "*");
config.EnableCors(cors);
}
내 AccountController 파일에서 상단의 EnableCors에 추가했습니다.
[EnableCors(origins: "*", headers: "*", methods: "*")]
[Authorize]
[RoutePrefix("api/Account")]
마지막으로 Web.config 파일에 다음을 추가했습니다.
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Origin" value="*" />
<add name="Access-Control-Allow-Headers" value="Content-Type" />
<add name="Access-Control-Allow-Methods" value="GET,POST,PUT,DELETE,OPTIONS" />
<add name="Access-Control-Allow-Credentials" value="true" />
</customHeaders>
</httpProtocol>
이것은 내 로그인 문제를 해결했지만 내 GETS가 작동하지 않습니다. 다음은 GET 함수의 예입니다.
jQuery.support.cors = true;
if (window.XMLHttpRequest) {
var xmlhttp = new XMLHttpRequest();
xmlhttp.open("GET", 'http://localhost:60690/api/ProfilePicture?Username=' + username, false);
xmlhttp.setRequestHeader('Content-Type', 'application/json; charset=utf-8');
xmlhttp.setRequestHeader('Authorization', 'Bearer ' + localStorage.getItem('accessToken'));
xmlhttp.send();
if (xmlhttp.status == 200) {
returnValue = jQuery.parseJSON(xmlhttp.responseText);
}
}
GET에서 "CORS 응답에 대해 다중 Access-Control-Allow-Origin 헤더가 허용되지 않습니다."라는 오류가 발생합니다. 어디에서 여러 Access-Control-Allow-Origin 헤더가 있는지 볼 수 없습니다. 어디를 찾아야합니까?
업데이트 1
흥미로운 것을 찾았습니다. Fiddler를 사용하여 백그라운드에서 진행되는 모든 작업과 오류를 발생시키는 GET 함수에서 헤더에 표시됩니다.
따라서 "Access-Control-Allow-Origin : *"은 확실히 두 번 표시되지만 문제는 그 이유입니다. 내 코드를 모두 검색했고 한 번만 선언했습니다. 이 줄을 제거하면 로그인 페이지가 깨져서 그대로 두어야합니다.
나는 이것을 알아 낸 것 같다. WebApiConfig 파일로 이동하여 CORS에 대한 부분을 다음과 같이 변경했습니다.
//var cors = new EnableCorsAttribute("*", "*", "*");
//config.EnableCors(cors);
config.EnableCors();
그런 다음 컨트롤러에서 EnableCors 부분을 제거하고 다시 작동하기 시작했습니다. GET 호출에서 여전히 오류가 발생하지만 두 개의 오류에서 하나의 오류로 이동하여 진행 중입니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다