ASP.NET WebAPI 2 복잡 한 크로스 도 메 인 설정 요청 방법 소개

ASP.Net Core 의 크로스 도 메 인 설정 은 비교적 간단 합 니 다.  정 부 는 모두 구체 적 인 마이크로소프트 공식 문 서 를 통합 시 켰 다.
https://docs.microsoft.com/zh-cn/aspnet/core/security/cors?view=aspnetcore-3.1#ecors
도 메 인 조건
크로스 필드 란 현재 자원 이 다른 자원 에 접근 할 때 발생 하 는 http 요청 이 보안 상의 이유(같은 소스 정책 으로 인해 도 메 인 이름,프로 토 콜,포트 에 하나 만 다 르 면 다른 소스)로 인해 브 라 우 저 는 이러한 요청 의 정상 적 인 접근 을 제한 합 니 다.특히 주의해 야 할 것 은 브 라 우 저 에서 발생 합 니 다.
해결 방법
방법 1.web.config 파일 의 system.webServer 노드 에 다음 설정 을 추가 합 니 다.

<system.webServer>
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Methods" value="OPTIONS,POST,GET"/>
<add name="Access-Control-Allow-Headers" value="x-requested-with,content-type"/>
<add name="Access-Control-Allow-Origin" value="*" />
</customHeaders>
</httpProtocol>
</system.webServer>
방법 2.Nuget 패 키 지 는 Microsoft.AspNet.cors 를 참조 한 다음 컨트롤 러 에 기능 을 추가 합 니 다.
[EnableCors(origins: "*", headers: "*", methods: "*")] 
상기 두 가지 방법 을 주의 하 십시오.중복 설정 하지 마 십시오.두 번 설정 하면'Access-Control-Allow-Origin'header contains multiple values'*,*'가 잘못 되 었 습 니 다.
복잡 한 요구 문제
상기 두 가지 방법 은 간단 한 크로스 요청 에 만 유효 하고 복잡 한 크로스 요청 을 처리 할 수 없습니다.
간단 한 요청:요청 방법 은 GET/HEAD/POST 이 며,contentType 은 text/plain,application/x-www-form-urlencoded,multipart/form-data 입 니 다.
상기 조건 을 만족 시 키 지 못 하 는 것 은 복잡 한 요구 로 간주 합 니 다.개발 과정 에서 저 희 는 이 조건 을 자주 촉발 합 니 다.대부분 저희 가 요청 한 contentType 설정 은 application/json 으로 인해 발생 합 니 다.
메모:간단 한 요청 은 Authentication 인증 header 를 설정 하면'업그레이드'를 복잡 한 요청 으로 할 수 있 습 니 다.
복잡 한 요청 은 정식 통신 에 앞서 HTTP 조회 요청 을 한 번 추가 해'예 찰'요청(preflight)이 라 고 한다.브 라 우 저 는 서버 에 현재 웹 페이지 가 있 는 도 메 인 이름 이 서버 의 허가 명단 에 있 는 지,그리고 어떤 HTTP 동사 와 헤더 정보 필드 를 사용 할 수 있 는 지 물 어 봅 니 다.긍정 적 인 답변 을 받 아야 브 라 우 저 에서 정식 XML HttpRequest 요청 을 보 낼 수 있 습 니 다.그렇지 않 으 면 잘못 보 고 됩 니 다.이번 preflight 의 Http 방법 은 Options 입 니 다.다시 말 하면 xhr 요청 이 발송 되 기 전에 Options 요청 을 먼저 보 내 면 실행 할 요청 이 복잡 하 다 는 것 을 설명 합 니 다.
복잡 요청 처리
Global.asax 파일 에서 응용 프로그램 을 통 해BeginRequest 방법 처리:

protected override void Application_BeginRequest(object sender, EventArgs e)
{
//            
Response.Headers.Add("Access-Control-Allow-Origin",”*“);
if (Request.Headers.AllKeys.Contains("Origin") && Request.HttpMethod == "OPTIONS")//    Options  
{
Response.Headers.Add("Access-Control-Allow-Headers", "*");
Response.Headers.Add("Access-Control-Allow-Methods", "*");
Response.Flush();
Response.End();
}
base.Application_BeginRequest(sender, e);
}
이렇게 해서 Options 크로스 도 메 인 요청 에 대해'크로스 도 메 인 지원 가능'한 응답 을 한 다음 에 정식 요청 이 컨트롤 러 에 있 는 Action 에 도착 하면 해당 하 는 크로스 도 메 인 방문 처리 가 있 습 니 다.그러면 전체 복잡 한 요구 에 대해 도 메 인 을 넘 으 면 이 루어 집 니 다.
마이크로소프트 공식 참고:https://docs.microsoft.com/zh-cn/aspnet/web-api/overview/security/enabling-cross-origin-requests-in-web-api
총결산
여기 서 ASP.NET WebAPI 2 의 복잡 한 요청 크로스 도 메 인 설정 에 관 한 글 을 소개 합 니 다.더 많은 관련 ASP.NET WebAPI 2 의 복잡 한 요청 크로스 도 메 인 설정 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 많은 지원 을 바 랍 니 다!

좋은 웹페이지 즐겨찾기